|
5 | 5 |
|
6 | 6 | from openapi_core.casting.schemas.exceptions import CastError |
7 | 7 | from openapi_core.deserializing.exceptions import DeserializeError |
8 | | -from openapi_core.deserializing.parameters.factories import ( |
9 | | - ParameterDeserializersFactory, |
10 | | -) |
11 | 8 | from openapi_core.exceptions import ( |
12 | 9 | MissingRequiredParameter, MissingParameter, |
13 | 10 | MissingRequiredRequestBody, MissingRequestBody, |
@@ -46,10 +43,6 @@ def schema_unmarshallers_factory(self): |
46 | 43 | def security_provider_factory(self): |
47 | 44 | return SecurityProviderFactory() |
48 | 45 |
|
49 | | - @property |
50 | | - def parameter_deserializers_factory(self): |
51 | | - return ParameterDeserializersFactory() |
52 | | - |
53 | 46 | def validate(self, request): |
54 | 47 | try: |
55 | 48 | path, operation, _, path_result, _ = self._find_path(request) |
@@ -177,35 +170,23 @@ def _get_parameters(self, request, params): |
177 | 170 | return RequestParameters(**locations), errors |
178 | 171 |
|
179 | 172 | def _get_parameter(self, param, request): |
180 | | - if param.getkey('deprecated', False): |
| 173 | + name = param['name'] |
| 174 | + deprecated = param.getkey('deprecated', False) |
| 175 | + if deprecated: |
181 | 176 | warnings.warn( |
182 | | - "{0} parameter is deprecated".format(param['name']), |
| 177 | + "{0} parameter is deprecated".format(name), |
183 | 178 | DeprecationWarning, |
184 | 179 | ) |
185 | 180 |
|
| 181 | + param_location = param['in'] |
| 182 | + location = request.parameters[param_location] |
186 | 183 | try: |
187 | | - raw_value = self._get_parameter_value(param, request) |
188 | | - except MissingParameter: |
189 | | - if 'schema' not in param: |
190 | | - raise |
191 | | - schema = param / 'schema' |
192 | | - if 'default' not in schema: |
193 | | - raise |
194 | | - casted = schema['default'] |
195 | | - else: |
196 | | - # Simple scenario |
197 | | - if 'content' not in param: |
198 | | - deserialised = self._deserialise_parameter(param, raw_value) |
199 | | - schema = param / 'schema' |
200 | | - # Complex scenario |
201 | | - else: |
202 | | - content = param / 'content' |
203 | | - mimetype, media_type = next(content.items()) |
204 | | - deserialised = self._deserialise_data(mimetype, raw_value) |
205 | | - schema = media_type / 'schema' |
206 | | - casted = self._cast(schema, deserialised) |
207 | | - unmarshalled = self._unmarshal(schema, casted) |
208 | | - return unmarshalled |
| 184 | + return self._get_param_or_header_value(param, location) |
| 185 | + except KeyError: |
| 186 | + required = param.getkey('required', False) |
| 187 | + if required: |
| 188 | + raise MissingRequiredParameter(name) |
| 189 | + raise MissingParameter(name) |
209 | 190 |
|
210 | 191 | def _get_body(self, request, operation): |
211 | 192 | if 'requestBody' not in operation: |
@@ -280,7 +261,3 @@ def _get_body_value(self, request_body, request): |
280 | 261 | raise MissingRequiredRequestBody(request) |
281 | 262 | raise MissingRequestBody(request) |
282 | 263 | return request.body |
283 | | - |
284 | | - def _deserialise_parameter(self, param, value): |
285 | | - deserializer = self.parameter_deserializers_factory.create(param) |
286 | | - return deserializer(value) |
0 commit comments