@@ -396,6 +396,13 @@ class Meta:
396
396
right = TreeLeaf ()
397
397
398
398
399
+ class ExplicitRawMapModel (Model ):
400
+ class Meta :
401
+ table_name = 'ExplicitRawMapModel'
402
+
403
+ map_attr = MapAttribute ()
404
+
405
+
399
406
class OverriddenSession (requests .Session ):
400
407
"""
401
408
A overridden session for test
@@ -2996,3 +3003,51 @@ def test_result_set_iter(self):
2996
3003
rs = ResultSet (results = results , operation = operations , arguments = arguments )
2997
3004
for k in rs :
2998
3005
self .assertTrue (k in results )
3006
+
3007
+ def test_explicit_raw_map_serialize_pass (self ):
3008
+ map_native = {'foo' : 'bar' }
3009
+ map_serialized = {'M' : {'foo' : {'S' : 'bar' }}}
3010
+ instance = ExplicitRawMapModel (map_attr = map_native )
3011
+ serialized = instance ._serialize ()
3012
+ self .assertEqual (serialized ['attributes' ]['map_attr' ], map_serialized )
3013
+
3014
+ def test_raw_map_serialize_fun_one (self ):
3015
+ map_native = {
3016
+ 'foo' : 'bar' , 'num' : 1 , 'bool_type' : True ,
3017
+ 'other_b_type' : False , 'floaty' : 1.2 , 'listy' : [1 ,2 ,3 ],
3018
+ 'mapy' : {'baz' : 'bongo' }
3019
+ }
3020
+ expected = {'M' : {'foo' : {'S' : u'bar' },
3021
+ 'listy' : {'L' : [{'N' : '1' }, {'N' : '2' }, {'N' : '3' }]},
3022
+ 'num' : {'N' : '1' }, 'other_b_type' : {'BOOL' : False },
3023
+ 'floaty' : {'N' : '1.2' }, 'mapy' : {'M' : {'baz' : {'S' : u'bongo' }}},
3024
+ 'bool_type' : {'BOOL' : True }}}
3025
+
3026
+ instance = ExplicitRawMapModel (map_attr = map_native )
3027
+ serialized = instance ._serialize ()
3028
+ actual = serialized ['attributes' ]['map_attr' ]
3029
+ self .assertEqual (expected , actual )
3030
+
3031
+ def test_raw_map_deserializes (self ):
3032
+ map_native = {
3033
+ 'foo' : 'bar' , 'num' : 1 , 'bool_type' : True ,
3034
+ 'other_b_type' : False , 'floaty' : 1.2 , 'listy' : [1 , 2 , 3 ],
3035
+ 'mapy' : {'baz' : 'bongo' }
3036
+ }
3037
+ map_serialized = {
3038
+ 'M' : {
3039
+ 'foo' : {'S' : 'bar' },
3040
+ 'num' : {'N' : 1 },
3041
+ 'bool_type' : {'BOOL' : True },
3042
+ 'other_b_type' : {'BOOL' : False },
3043
+ 'floaty' : {'N' : 1.2 },
3044
+ 'listy' : {'L' : [{'N' : 1 }, {'N' : 2 }, {'N' : 3 }]},
3045
+ 'mapy' : {'M' : {'baz' : {'S' : 'bongo' }}}
3046
+ }
3047
+ }
3048
+ instance = ExplicitRawMapModel (map_attr = map_native )
3049
+ instance ._deserialize (map_serialized )
3050
+ actual = instance .map_attr
3051
+ for k ,v in six .iteritems (map_native ):
3052
+ self .assertEqual (v , actual [k ])
3053
+
0 commit comments