@@ -120,18 +120,19 @@ def index_definition(index_name, keys, gsi=False):
120120
121121class DynamoSerializer :
122122 def __init__ (self , schema ):
123- self .schema = schema
123+ self .properties = schema ["properties" ]
124+ self .definitions = schema .get ("definitions" )
125+
126+ def _get_type (self , field_name ):
127+ if "$ref" in self .properties [field_name ]:
128+ def_name = self .properties [field_name ]["$ref" ].split ('/' )[- 1 ]
129+ return self .definitions [def_name ].get ("type" )
130+ return self .properties [field_name ].get ("type" , "anyOf" )
124131
125132 def _serialize_field (self , field_name , value ):
126- definition = self .schema .get ("definitions" )
127- schema = self .schema ["properties" ]
128- if definition :
129- for k , v in definition .items ():
130- schema [k .lower ()] = v
131- schema = self .schema ["properties" ]
132- field_type = schema [field_name ].get ("type" , "anyOf" )
133+ field_type = self ._get_type (field_name )
133134 try :
134- if any ([ field_name in self . schema [ 'required' ], value is not None ]) :
135+ if value is not None :
135136 return SERIALIZE_MAP [field_type ](value )
136137 except KeyError :
137138 log .debug (f"No serializer for field_type { field_type } " )
@@ -147,14 +148,9 @@ def serialize_record(self, data_dict) -> dict:
147148 }
148149
149150 def _deserialize_field (self , field_name , value ):
150- definition = self .schema .get ("definitions" )
151- schema = self .schema ["properties" ]
152- if definition :
153- for k , v in definition .items ():
154- schema [k .lower ()] = v
155- field_type = schema [field_name ].get ("type" , "anyOf" )
151+ field_type = self ._get_type (field_name )
156152 try :
157- if any ([ field_name in self . schema [ 'required' ], value is not None ]) :
153+ if value is not None :
158154 return DESERIALIZE_MAP [field_type ](value )
159155 except KeyError :
160156 log .debug (f"No deserializer for field_type { field_type } " )
0 commit comments