diff --git a/common/lib/xmodule/xmodule/fields.py b/common/lib/xmodule/xmodule/fields.py index 10056f04fd..2fc6a2a055 100644 --- a/common/lib/xmodule/xmodule/fields.py +++ b/common/lib/xmodule/xmodule/fields.py @@ -207,3 +207,15 @@ class RelativeTime(Field): return str(value) raise TypeError("RelativeTime: cannot convert {!r} to json".format(value)) + + def __str__(self): + """ + Makes first H in str representation non-optional. + + str(timedelta) has [H]H:MM:SS format, which is not suitable + for front-end (and IsoTime standart), so we forse HH:MM:SS + """ + _str = super(RelativeTime, slef).__str__(self) + if len(_str) == 7: + _str = '0' + _str + return _str diff --git a/common/lib/xmodule/xmodule/tests/test_fields.py b/common/lib/xmodule/xmodule/tests/test_fields.py index 808ceb754b..cc0a34b0e0 100644 --- a/common/lib/xmodule/xmodule/tests/test_fields.py +++ b/common/lib/xmodule/xmodule/tests/test_fields.py @@ -167,3 +167,13 @@ class RelativeTimeTest(unittest.TestCase): with self.assertRaises(TypeError): RelativeTimeTest.delta.to_json("123") + + def test_str(self): + self.assertEqual( + "1:02:03", + RelativeTimeTest.delta.to_json(datetime.timedelta(seconds=3723)) + ) + self.assertEqual( + "11:02:03", + RelativeTimeTest.delta.to_json(datetime.timedelta(seconds=39723)) + )