Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-analytics-data-api
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-analytics-data-api
Commits
7fe4fa66
Commit
7fe4fa66
authored
Jul 27, 2016
by
Tyler Hallada
Committed by
GitHub
Jul 27, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #127 from edx/thallada/datetime-start-end-dates
Allows time component in start and end date parameters
parents
ec784aaf
a54fb1db
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
24 additions
and
15 deletions
+24
-15
analytics_data_api/v0/tests/views/test_courses.py
+13
-5
analytics_data_api/v0/views/courses.py
+11
-10
No files found.
analytics_data_api/v0/tests/views/test_courses.py
View file @
7fe4fa66
...
@@ -130,22 +130,30 @@ class CourseViewTestCaseMixin(DemoCourseMixin):
...
@@ -130,22 +130,30 @@ class CourseViewTestCaseMixin(DemoCourseMixin):
def
assertIntervalFilteringWorks
(
self
,
expected_response
,
start_date
,
end_date
):
def
assertIntervalFilteringWorks
(
self
,
expected_response
,
start_date
,
end_date
):
# If start date is after date of existing data, return a 404
# If start date is after date of existing data, return a 404
date
=
(
start_date
+
datetime
.
timedelta
(
days
=
30
))
.
strftime
(
settings
.
DATE_FORMAT
)
date
=
(
start_date
+
datetime
.
timedelta
(
days
=
30
))
.
strftime
(
settings
.
DATE
TIME
_FORMAT
)
response
=
self
.
authenticated_get
(
response
=
self
.
authenticated_get
(
'
%
scourses/
%
s
%
s?start_date=
%
s'
%
(
self
.
api_root_path
,
self
.
course_id
,
self
.
path
,
date
))
'
%
scourses/
%
s
%
s?start_date=
%
s'
%
(
self
.
api_root_path
,
self
.
course_id
,
self
.
path
,
date
))
self
.
assertEquals
(
response
.
status_code
,
404
)
self
.
assertEquals
(
response
.
status_code
,
404
)
# If end date is before date of existing data, return a 404
# If end date is before date of existing data, return a 404
date
=
(
start_date
-
datetime
.
timedelta
(
days
=
30
))
.
strftime
(
settings
.
DATE_FORMAT
)
date
=
(
start_date
-
datetime
.
timedelta
(
days
=
30
))
.
strftime
(
settings
.
DATE
TIME
_FORMAT
)
response
=
self
.
authenticated_get
(
response
=
self
.
authenticated_get
(
'
%
scourses/
%
s
%
s?end_date=
%
s'
%
(
self
.
api_root_path
,
self
.
course_id
,
self
.
path
,
date
))
'
%
scourses/
%
s
%
s?end_date=
%
s'
%
(
self
.
api_root_path
,
self
.
course_id
,
self
.
path
,
date
))
self
.
assertEquals
(
response
.
status_code
,
404
)
self
.
assertEquals
(
response
.
status_code
,
404
)
# If data falls in date range, data should be returned
# If data falls in date range, data should be returned
start
_date
=
start_date
.
strftime
(
settings
.
DAT
E_FORMAT
)
start
=
start_date
.
strftime
(
settings
.
DATETIM
E_FORMAT
)
end
_date
=
end_date
.
strftime
(
settings
.
DAT
E_FORMAT
)
end
=
end_date
.
strftime
(
settings
.
DATETIM
E_FORMAT
)
response
=
self
.
authenticated_get
(
'
%
scourses/
%
s
%
s?start_date=
%
s&end_date=
%
s'
%
(
response
=
self
.
authenticated_get
(
'
%
scourses/
%
s
%
s?start_date=
%
s&end_date=
%
s'
%
(
self
.
api_root_path
,
self
.
course_id
,
self
.
path
,
start_date
,
end_date
))
self
.
api_root_path
,
self
.
course_id
,
self
.
path
,
start
,
end
))
self
.
assertEquals
(
response
.
status_code
,
200
)
self
.
assertListEqual
(
response
.
data
,
expected_response
)
# Passing dates in DATE_FORMAT still works
start
=
start_date
.
strftime
(
settings
.
DATE_FORMAT
)
end
=
end_date
.
strftime
(
settings
.
DATE_FORMAT
)
response
=
self
.
authenticated_get
(
'
%
scourses/
%
s
%
s?start_date=
%
s&end_date=
%
s'
%
(
self
.
api_root_path
,
self
.
course_id
,
self
.
path
,
start
,
end
))
self
.
assertEquals
(
response
.
status_code
,
200
)
self
.
assertEquals
(
response
.
status_code
,
200
)
self
.
assertListEqual
(
response
.
data
,
expected_response
)
self
.
assertListEqual
(
response
.
data
,
expected_response
)
...
...
analytics_data_api/v0/views/courses.py
View file @
7fe4fa66
...
@@ -29,19 +29,20 @@ class BaseCourseView(generics.ListAPIView):
...
@@ -29,19 +29,20 @@ class BaseCourseView(generics.ListAPIView):
end_date
=
request
.
QUERY_PARAMS
.
get
(
'end_date'
)
end_date
=
request
.
QUERY_PARAMS
.
get
(
'end_date'
)
timezone
=
utc
timezone
=
utc
if
start_date
:
self
.
start_date
=
self
.
parse_date
(
start_date
,
timezone
)
start_date
=
datetime
.
datetime
.
strptime
(
start_date
,
settings
.
DATE_FORMAT
)
self
.
end_date
=
self
.
parse_date
(
end_date
,
timezone
)
start_date
=
make_aware
(
start_date
,
timezone
)
if
end_date
:
end_date
=
datetime
.
datetime
.
strptime
(
end_date
,
settings
.
DATE_FORMAT
)
end_date
=
make_aware
(
end_date
,
timezone
)
self
.
start_date
=
start_date
self
.
end_date
=
end_date
return
super
(
BaseCourseView
,
self
)
.
get
(
request
,
*
args
,
**
kwargs
)
return
super
(
BaseCourseView
,
self
)
.
get
(
request
,
*
args
,
**
kwargs
)
def
parse_date
(
self
,
date
,
timezone
):
if
date
:
try
:
date
=
datetime
.
datetime
.
strptime
(
date
,
settings
.
DATETIME_FORMAT
)
except
ValueError
:
date
=
datetime
.
datetime
.
strptime
(
date
,
settings
.
DATE_FORMAT
)
date
=
make_aware
(
date
,
timezone
)
return
date
def
apply_date_filtering
(
self
,
queryset
):
def
apply_date_filtering
(
self
,
queryset
):
raise
NotImplementedError
raise
NotImplementedError
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment