22from itertools import chain
33from six import iteritems
44
5+ from openapi_core .casting .schemas .exceptions import CastError
56from openapi_core .schema .media_types .exceptions import (
67 InvalidMediaTypeValue , InvalidContentType ,
78)
@@ -112,10 +113,11 @@ def _get_parameters(self, request, params):
112113 deserialised = self ._deserialise (param , raw_value )
113114 except OpenAPIParameterError as exc :
114115 errors .append (exc )
116+ continue
115117 else :
116118 try :
117119 casted = self ._cast (param , deserialised )
118- except OpenAPIParameterError as exc :
120+ except CastError as exc :
119121 errors .append (exc )
120122 continue
121123
@@ -153,7 +155,7 @@ def _get_body(self, request, operation):
153155 else :
154156 try :
155157 casted = self ._cast (media_type , deserialised )
156- except InvalidMediaTypeValue as exc :
158+ except CastError as exc :
157159 errors .append (exc )
158160 else :
159161 try :
@@ -167,7 +169,15 @@ def _deserialise(self, param_or_media_type, value):
167169 return param_or_media_type .deserialise (value )
168170
169171 def _cast (self , param_or_media_type , value ):
170- return param_or_media_type .cast (value )
172+ # return param_or_media_type.cast(value)
173+ if not param_or_media_type .schema :
174+ return value
175+
176+ from openapi_core .casting .schemas .exceptions import CastError
177+ from openapi_core .casting .schemas .factories import SchemaCastersFactory
178+ casters_factory = SchemaCastersFactory ()
179+ caster = casters_factory .create (param_or_media_type .schema )
180+ return caster (value )
171181
172182 def _unmarshal (self , param_or_media_type , value ):
173183 if not param_or_media_type .schema :
0 commit comments