|
5 | 5 | from openapi_core.casting.schemas.exceptions import CastError |
6 | 6 | from openapi_core.deserializing.exceptions import DeserializeError |
7 | 7 | from openapi_core.exceptions import ( |
8 | | - MissingRequiredParameter, MissingParameter, MissingRequestBody, |
| 8 | + MissingRequiredParameter, MissingParameter, |
| 9 | + MissingRequiredRequestBody, MissingRequestBody, |
9 | 10 | ) |
10 | 11 | from openapi_core.security.exceptions import SecurityError |
11 | 12 | from openapi_core.schema.parameters import get_aslist, get_explode |
@@ -175,15 +176,18 @@ def _get_body(self, request, operation): |
175 | 176 | return None, [] |
176 | 177 |
|
177 | 178 | request_body = operation / 'requestBody' |
| 179 | + |
178 | 180 | try: |
179 | | - media_type, mimetype = self._get_media_type( |
180 | | - request_body / 'content', request) |
181 | | - except MediaTypeFinderError as exc: |
| 181 | + raw_body = self._get_body_value(request_body, request) |
| 182 | + except MissingRequiredRequestBody as exc: |
182 | 183 | return None, [exc, ] |
| 184 | + except MissingRequestBody: |
| 185 | + return None, [] |
183 | 186 |
|
184 | 187 | try: |
185 | | - raw_body = self._get_body_value(request_body, request) |
186 | | - except MissingRequestBody as exc: |
| 188 | + media_type, mimetype = self._get_media_type( |
| 189 | + request_body / 'content', request) |
| 190 | + except MediaTypeFinderError as exc: |
187 | 191 | return None, [exc, ] |
188 | 192 |
|
189 | 193 | try: |
@@ -233,8 +237,9 @@ def _get_parameter_value(self, param, request): |
233 | 237 | return location[param['name']] |
234 | 238 |
|
235 | 239 | def _get_body_value(self, request_body, request): |
236 | | - required = request_body.getkey('required', False) |
237 | | - if not request.body and required: |
| 240 | + if not request.body: |
| 241 | + if request_body.getkey('required', False): |
| 242 | + raise MissingRequiredRequestBody(request) |
238 | 243 | raise MissingRequestBody(request) |
239 | 244 | return request.body |
240 | 245 |
|
|
0 commit comments