@@ -156,7 +156,7 @@ def has(self, key):
156156 def keys (self ):
157157 if isinstance (self .data , dict ):
158158 return list (self .data .keys ())
159- return list (vars (self .data ).keys ())
159+ return list (getattr (self .data , '__dict__' , {} ).keys ())
160160
161161 def get_check (self , key , default = None ):
162162 if isinstance (self .data , dict ):
@@ -172,11 +172,27 @@ def get_check(self, key, default=None):
172172 has_key = True
173173 return value , has_key
174174
175+ def _merge_dict (src , dst ):
176+ for k , v in six .iteritems (dst ):
177+ if isinstance (src , dict ):
178+ if isinstance (v , dict ):
179+ r = _merge_dict (src .get (k , {}), v )
180+ src [k ] = r
181+ else :
182+ src [k ] = v
183+ else :
184+ src = {k : v }
185+ return src
186+
175187 def _normalize_dict (schema , data ):
176188 result = {}
177189 if not isinstance (data , DataWrapper ):
178190 data = DataWrapper (data )
179191
192+ for _schema in schema .get ('allOf' , []):
193+ rs_component = _normalize (_schema , data )
194+ _merge_dict (result , rs_component )
195+
180196 for key , _schema in six .iteritems (schema .get ('properties' , {})):
181197 # set default
182198 type_ = _schema .get ('type' , 'object' )
@@ -194,11 +210,6 @@ def _normalize_dict(schema, data):
194210 errors .append (dict (name = 'property_missing' ,
195211 message = '`%s` is required' % key ))
196212
197- for _schema in schema .get ('allOf' , []):
198- rs_component = _normalize (_schema , data )
199- rs_component .update (result )
200- result = rs_component
201-
202213 additional_properties_schema = schema .get ('additionalProperties' , False )
203214 if additional_properties_schema :
204215 aproperties_set = set (data .keys ()) - set (result .keys ())
0 commit comments