@@ -109,10 +109,15 @@ def _get_parameters(self, request, params):
109109 casted = param .schema .default
110110 else :
111111 try :
112- casted = param . cast ( raw_value )
112+ deserialised = self . _deserialise ( param , raw_value )
113113 except OpenAPIParameterError as exc :
114114 errors .append (exc )
115- continue
115+ else :
116+ try :
117+ casted = self ._cast (param , deserialised )
118+ except OpenAPIParameterError as exc :
119+ errors .append (exc )
120+ continue
116121
117122 try :
118123 unmarshalled = self ._unmarshal (param , casted )
@@ -142,17 +147,28 @@ def _get_body(self, request, operation):
142147 errors .append (exc )
143148 else :
144149 try :
145- casted = media_type . cast ( raw_body )
150+ deserialised = self . _deserialise ( media_type , raw_body )
146151 except InvalidMediaTypeValue as exc :
147152 errors .append (exc )
148153 else :
149154 try :
150- body = self ._unmarshal (media_type , casted )
151- except ( ValidateError , UnmarshalError ) as exc :
155+ casted = self ._cast (media_type , deserialised )
156+ except InvalidMediaTypeValue as exc :
152157 errors .append (exc )
158+ else :
159+ try :
160+ body = self ._unmarshal (media_type , casted )
161+ except (ValidateError , UnmarshalError ) as exc :
162+ errors .append (exc )
153163
154164 return body , errors
155165
166+ def _deserialise (self , param_or_media_type , value ):
167+ return param_or_media_type .deserialise (value )
168+
169+ def _cast (self , param_or_media_type , value ):
170+ return param_or_media_type .cast (value )
171+
156172 def _unmarshal (self , param_or_media_type , value ):
157173 if not param_or_media_type .schema :
158174 return value
0 commit comments