diff --git a/msrest/serialization.py b/msrest/serialization.py index f9037b9..378de20 100644 --- a/msrest/serialization.py +++ b/msrest/serialization.py @@ -953,6 +953,16 @@ class Serializer(object): return self.serialize_long(attr) if obj_type is unicode_str: return self.serialize_unicode(attr) + if obj_type is datetime.datetime: + return self.serialize_iso(attr) + if obj_type is datetime.date: + return self.serialize_date(attr) + if obj_type is datetime.time: + return self.serialize_time(attr) + if obj_type is datetime.timedelta: + return self.serialize_duration(attr) + if obj_type is decimal.Decimal: + return self.serialize_decimal(attr) # If it's a model or I know this dependency, serialize as a Model elif obj_type in self.dependencies.values() or isinstance(attr, Model): diff --git a/tests/test_serialization.py b/tests/test_serialization.py index ab04cfd..6837bad 100644 --- a/tests/test_serialization.py +++ b/tests/test_serialization.py @@ -25,6 +25,7 @@ # #-------------------------------------------------------------------------- +from decimal import Decimal import sys import json import isodate @@ -1395,6 +1396,42 @@ class TestRuntimeSerialized(unittest.TestCase): 'data': {'id': u"\ua015"} } + def test_datetime_types_as_type_object(self): + """https://github.com/Azure/msrest-for-python/issues/223 + """ + + class TestModel(Model): + _attribute_map = {'data': {'key': 'data', 'type': 'object'}} + + m = TestModel(data = { + 'datetime': isodate.parse_datetime('2012-02-24T00:53:52.780Z'), + 'date': date(2019,5,1), + 'time': time(11,12,13), + 'timedelta': timedelta(56) + }) + serialized = m.serialize() + assert serialized['data'] == { + 'datetime': '2012-02-24T00:53:52.780Z', + 'date': '2019-05-01', + 'time': '11:12:13', + 'timedelta': 'P56D' + } + + def test_decimal_types_as_type_object(self): + """https://github.com/Azure/msrest-for-python/issues/223 + """ + + class TestModel(Model): + _attribute_map = {'data': {'key': 'data', 'type': 'object'}} + + m = TestModel(data = { + 'decimal': Decimal('1.1'), + }) + serialized = m.serialize() + assert serialized['data'] == { + 'decimal': 1.1 + } + def test_json_with_xml_map(self): basic_json = {'age': 37, 'country': 'france'}