From 529a805c0c06e5d62d7d8345ad2d1714a2eaa7de Mon Sep 17 00:00:00 2001 From: Awais Jibran Date: Mon, 29 Mar 2021 13:43:01 +0500 Subject: [PATCH] Fixing dates serialization in course import (#27137) --- common/lib/xmodule/xmodule/tests/test_xml_module.py | 2 ++ common/lib/xmodule/xmodule/xml_module.py | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/common/lib/xmodule/xmodule/tests/test_xml_module.py b/common/lib/xmodule/xmodule/tests/test_xml_module.py index b58fd59f68..3589670ebc 100644 --- a/common/lib/xmodule/xmodule/tests/test_xml_module.py +++ b/common/lib/xmodule/xmodule/tests/test_xml_module.py @@ -4,6 +4,7 @@ import unittest from unittest.mock import Mock +import dateutil.parser from opaque_keys.edx.locator import BlockUsageLocator, CourseLocator from xblock.field_data import DictFieldData @@ -386,6 +387,7 @@ class TestSerialize(unittest.TestCase): assert serialize_field(['foo', 'bar']) == '["foo", "bar"]' assert serialize_field("2012-12-31T23:59:59Z") == '2012-12-31T23:59:59Z' assert serialize_field("1 day 12 hours 59 minutes 59 seconds") == '1 day 12 hours 59 minutes 59 seconds' + assert serialize_field(dateutil.parser.parse('2012-12-31T23:59:59Z')) == '2012-12-31T23:59:59+00:00' class TestDeserialize(unittest.TestCase): diff --git a/common/lib/xmodule/xmodule/xml_module.py b/common/lib/xmodule/xmodule/xml_module.py index e590da91eb..84e6c60641 100644 --- a/common/lib/xmodule/xmodule/xml_module.py +++ b/common/lib/xmodule/xmodule/xml_module.py @@ -1,4 +1,5 @@ # lint-amnesty, pylint: disable=missing-module-docstring +import datetime import copy import json @@ -65,6 +66,10 @@ def serialize_field(value): """ if isinstance(value, str): return value + elif isinstance(value, datetime.datetime): + if value.tzinfo is not None and value.utcoffset() is None: + return value.isoformat() + 'Z' + return value.isoformat() return json.dumps(value, cls=EdxJSONEncoder)