@@ -120,23 +120,33 @@ class SchemaValidator(object):
120120 def __init__ (self , dereferencer ):
121121 self .dereferencer = dereferencer
122122
123+ def _nested_properties (self , schema ):
124+ schema_deref = self .dereferencer .dereference (schema )
125+ return schema_deref .get ("properties" , {}).keys ()
126+
123127 @wraps_errors
124128 def iter_errors (self , schema , require_properties = True ):
125129 schema_deref = self .dereferencer .dereference (schema )
126130 if not isinstance (schema_deref , dict ):
127131 return
128132
133+ nested_properties = []
129134 if 'allOf' in schema_deref :
130135 for inner_schema in schema_deref ['allOf' ]:
131136 for err in self .iter_errors (
132- inner_schema ,
133- require_properties = False
137+ inner_schema ,
138+ require_properties = False
134139 ):
135140 yield err
141+ nested_properties = nested_properties + list (self ._nested_properties (inner_schema ))
136142
137143 required = schema_deref .get ('required' , [])
138144 properties = schema_deref .get ('properties' , {}).keys ()
139- extra_properties = list (set (required ) - set (properties ))
145+ if 'allOf' in schema_deref :
146+ extra_properties = list (set (required ) - set (properties ) - set (nested_properties ))
147+ else :
148+ extra_properties = list (set (required ) - set (properties ))
149+
140150 if extra_properties and require_properties :
141151 yield ExtraParametersError (
142152 "Required list has not defined properties: {0}" .format (
0 commit comments