|
3 | 3 | from six import iteritems |
4 | 4 |
|
5 | 5 | from openapi_core.casting.schemas.exceptions import CastError |
| 6 | +from openapi_core.deserializing.exceptions import DeserializeError |
6 | 7 | from openapi_core.schema.media_types.exceptions import ( |
7 | 8 | InvalidMediaTypeValue, InvalidContentType, |
8 | 9 | ) |
9 | 10 | from openapi_core.schema.operations.exceptions import InvalidOperation |
| 11 | +from openapi_core.schema.parameters.enums import ParameterLocation |
10 | 12 | from openapi_core.schema.parameters.exceptions import ( |
11 | 13 | OpenAPIParameterError, MissingRequiredParameter, MissingParameter, |
12 | 14 | ) |
@@ -110,8 +112,9 @@ def _get_parameters(self, request, params): |
110 | 112 | casted = param.schema.default |
111 | 113 | else: |
112 | 114 | try: |
113 | | - deserialised = self._deserialise(param, raw_value) |
114 | | - except OpenAPIParameterError as exc: |
| 115 | + deserialised = self._deserialise_parameter( |
| 116 | + param, raw_value) |
| 117 | + except DeserializeError as exc: |
115 | 118 | errors.append(exc) |
116 | 119 | continue |
117 | 120 |
|
@@ -146,7 +149,7 @@ def _get_body(self, request, operation): |
146 | 149 | return None, [exc, ] |
147 | 150 |
|
148 | 151 | try: |
149 | | - deserialised = self._deserialise(media_type, raw_body) |
| 152 | + deserialised = self._deserialise_media_type(media_type, raw_body) |
150 | 153 | except InvalidMediaTypeValue as exc: |
151 | 154 | return None, [exc, ] |
152 | 155 |
|
@@ -183,9 +186,17 @@ def _get_body_value(self, request_body, request): |
183 | 186 | raise MissingRequestBody(request) |
184 | 187 | return request.body |
185 | 188 |
|
186 | | - def _deserialise(self, param_or_media_type, value): |
| 189 | + def _deserialise_media_type(self, param_or_media_type, value): |
187 | 190 | return param_or_media_type.deserialise(value) |
188 | 191 |
|
| 192 | + def _deserialise_parameter(self, param, value): |
| 193 | + from openapi_core.deserializing.parameters.factories import ( |
| 194 | + ParameterDeserializersFactory, |
| 195 | + ) |
| 196 | + deserializers_factory = ParameterDeserializersFactory() |
| 197 | + deserializer = deserializers_factory.create(param) |
| 198 | + return deserializer(value) |
| 199 | + |
189 | 200 | def _cast(self, param_or_media_type, value): |
190 | 201 | # return param_or_media_type.cast(value) |
191 | 202 | if not param_or_media_type.schema: |
|
0 commit comments