Commit 96cbc7c5 by Adam

Merge pull request #12202 from edx/adam/fix-pre-1900-course-setting-date

fix issue with pre-1900 course setting dates (TNL-4397)
parents 498f3877 26377a57
...@@ -52,6 +52,18 @@ class CourseSettingsEncoderTest(CourseTestCase): ...@@ -52,6 +52,18 @@ class CourseSettingsEncoderTest(CourseTestCase):
self.assertIsNone(jsondetails['effort'], "effort somehow initialized") self.assertIsNone(jsondetails['effort'], "effort somehow initialized")
self.assertIsNone(jsondetails['language'], "language somehow initialized") self.assertIsNone(jsondetails['language'], "language somehow initialized")
def test_pre_1900_date(self):
"""
Tests that the encoder can handle a pre-1900 date, since strftime
doesn't work for these dates.
"""
details = CourseDetails.fetch(self.course.id)
pre_1900 = datetime.datetime(1564, 4, 23, 1, 1, 1, tzinfo=UTC())
details.enrollment_start = pre_1900
dumped_jsondetails = json.dumps(details, cls=CourseSettingsEncoder)
loaded_jsondetails = json.loads(dumped_jsondetails)
self.assertEqual(loaded_jsondetails['enrollment_start'], pre_1900.isoformat())
def test_ooc_encoder(self): def test_ooc_encoder(self):
""" """
Test the encoder out of its original constrained purpose to see if it functions for general use Test the encoder out of its original constrained purpose to see if it functions for general use
......
...@@ -73,6 +73,10 @@ class Date(JSONField): ...@@ -73,6 +73,10 @@ class Date(JSONField):
return time.strftime('%Y-%m-%dT%H:%M:%SZ', value) return time.strftime('%Y-%m-%dT%H:%M:%SZ', value)
elif isinstance(value, datetime.datetime): elif isinstance(value, datetime.datetime):
if value.tzinfo is None or value.utcoffset().total_seconds() == 0: if value.tzinfo is None or value.utcoffset().total_seconds() == 0:
if value.year < 1900:
# strftime doesn't work for pre-1900 dates, so use
# isoformat instead
return value.isoformat()
# isoformat adds +00:00 rather than Z # isoformat adds +00:00 rather than Z
return value.strftime('%Y-%m-%dT%H:%M:%SZ') return value.strftime('%Y-%m-%dT%H:%M:%SZ')
else: else:
......
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