Commit 7fe4fa66 by Tyler Hallada Committed by GitHub

Merge pull request #127 from edx/thallada/datetime-start-end-dates

Allows time component in start and end date parameters
parents ec784aaf a54fb1db
...@@ -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.DATETIME_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.DATETIME_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.DATE_FORMAT) start = start_date.strftime(settings.DATETIME_FORMAT)
end_date = end_date.strftime(settings.DATE_FORMAT) end = end_date.strftime(settings.DATETIME_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)
......
...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment