2020from openapi_schema_validator ._types import is_string
2121
2222from openapi_core .extensions .models .factories import ModelPathFactory
23- from openapi_core .schema .schemas import get_all_properties
23+ from openapi_core .schema .schemas import get_schema_properties
2424from openapi_core .spec import Spec
2525from openapi_core .unmarshalling .schemas .datatypes import FormattersDict
2626from openapi_core .unmarshalling .schemas .enums import UnmarshalContext
@@ -268,7 +268,9 @@ def _unmarshal_properties(self, value: Any) -> Any:
268268 else :
269269 properties .update (any_of_properties )
270270
271- for prop_name , prop in get_all_properties (self .schema ).items ():
271+ # unmarshal schema properties
272+ schema_properties = get_schema_properties (self .schema )
273+ for prop_name , prop in schema_properties .items ():
272274 read_only = prop .getkey ("readOnly" , False )
273275 if self .context == UnmarshalContext .REQUEST and read_only :
274276 continue
@@ -286,23 +288,24 @@ def _unmarshal_properties(self, value: Any) -> Any:
286288 prop_value
287289 )
288290
291+ # unmarshal additional properties
289292 additional_properties = self .schema .getkey (
290293 "additionalProperties" , True
291294 )
292295 if additional_properties is not False :
293296 # free-form object
294297 if additional_properties is True :
295- additional_prop_schema = Spec . from_dict ({})
298+ unmarshal_func = lambda x : x
296299 # defined schema
297300 else :
298301 additional_prop_schema = self .schema / "additionalProperties"
299- additional_prop_unmarshaler = self .unmarshallers_factory .create (
300- additional_prop_schema
301- )
302+ unmarshal_func = self .unmarshallers_factory .create (
303+ additional_prop_schema
304+ )
302305 for prop_name , prop_value in value .items ():
303- if prop_name in properties :
306+ if prop_name in schema_properties :
304307 continue
305- properties [prop_name ] = additional_prop_unmarshaler (prop_value )
308+ properties [prop_name ] = unmarshal_func (prop_value )
306309
307310 return properties
308311
0 commit comments