Skip to content

Commit 209fa61

Browse files
lmazuelludokriss
andauthored
Smart serialize of type object (#224)
* Smart serialize of type object * Added decimal type as object (#225) Co-authored-by: Bjerkelund <k.bjerkelund@wilhelmsen.com> Co-authored-by: Kristoffer <43015594+ludokriss@users.noreply.github.com> Co-authored-by: Bjerkelund <k.bjerkelund@wilhelmsen.com>
1 parent c16e521 commit 209fa61

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

msrest/serialization.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,6 +953,16 @@ def serialize_object(self, attr, **kwargs):
953953
return self.serialize_long(attr)
954954
if obj_type is unicode_str:
955955
return self.serialize_unicode(attr)
956+
if obj_type is datetime.datetime:
957+
return self.serialize_iso(attr)
958+
if obj_type is datetime.date:
959+
return self.serialize_date(attr)
960+
if obj_type is datetime.time:
961+
return self.serialize_time(attr)
962+
if obj_type is datetime.timedelta:
963+
return self.serialize_duration(attr)
964+
if obj_type is decimal.Decimal:
965+
return self.serialize_decimal(attr)
956966

957967
# If it's a model or I know this dependency, serialize as a Model
958968
elif obj_type in self.dependencies.values() or isinstance(attr, Model):

tests/test_serialization.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#
2626
#--------------------------------------------------------------------------
2727

28+
from decimal import Decimal
2829
import sys
2930
import json
3031
import isodate
@@ -1395,6 +1396,42 @@ class TestModel(Model):
13951396
'data': {'id': u"\ua015"}
13961397
}
13971398

1399+
def test_datetime_types_as_type_object(self):
1400+
"""https://github.com/Azure/msrest-for-python/issues/223
1401+
"""
1402+
1403+
class TestModel(Model):
1404+
_attribute_map = {'data': {'key': 'data', 'type': 'object'}}
1405+
1406+
m = TestModel(data = {
1407+
'datetime': isodate.parse_datetime('2012-02-24T00:53:52.780Z'),
1408+
'date': date(2019,5,1),
1409+
'time': time(11,12,13),
1410+
'timedelta': timedelta(56)
1411+
})
1412+
serialized = m.serialize()
1413+
assert serialized['data'] == {
1414+
'datetime': '2012-02-24T00:53:52.780Z',
1415+
'date': '2019-05-01',
1416+
'time': '11:12:13',
1417+
'timedelta': 'P56D'
1418+
}
1419+
1420+
def test_decimal_types_as_type_object(self):
1421+
"""https://github.com/Azure/msrest-for-python/issues/223
1422+
"""
1423+
1424+
class TestModel(Model):
1425+
_attribute_map = {'data': {'key': 'data', 'type': 'object'}}
1426+
1427+
m = TestModel(data = {
1428+
'decimal': Decimal('1.1'),
1429+
})
1430+
serialized = m.serialize()
1431+
assert serialized['data'] == {
1432+
'decimal': 1.1
1433+
}
1434+
13981435
def test_json_with_xml_map(self):
13991436
basic_json = {'age': 37, 'country': 'france'}
14001437

0 commit comments

Comments
 (0)