22from itertools import chain
33from six import iteritems
44
5- from openapi_core .schema .exceptions import OpenAPIMappingError
6- from openapi_core .schema .parameters .exceptions import MissingParameter
5+ from openapi_core .schema .media_types .exceptions import (
6+ InvalidMediaTypeValue , InvalidContentType ,
7+ )
8+ from openapi_core .schema .operations .exceptions import InvalidOperation
9+ from openapi_core .schema .parameters .exceptions import (
10+ OpenAPIParameterError , MissingRequiredParameter ,
11+ )
12+ from openapi_core .schema .paths .exceptions import InvalidPath
13+ from openapi_core .schema .request_bodies .exceptions import MissingRequestBody
14+ from openapi_core .schema .servers .exceptions import InvalidServer
715from openapi_core .validation .request .datatypes import (
816 RequestParameters , RequestValidationResult ,
917)
@@ -20,7 +28,7 @@ def validate(self, request):
2028 try :
2129 server = self .spec .get_server (request .full_url_pattern )
2230 # don't process if server errors
23- except OpenAPIMappingError as exc :
31+ except InvalidServer as exc :
2432 return RequestValidationResult ([exc , ], None , None )
2533
2634 operation_pattern = get_operation_pattern (
@@ -29,10 +37,14 @@ def validate(self, request):
2937
3038 try :
3139 path = self .spec [operation_pattern ]
40+ except InvalidPath as exc :
41+ return RequestValidationResult ([exc , ], None , None )
42+
43+ try :
3244 operation = self .spec .get_operation (
3345 operation_pattern , request .method )
3446 # don't process if operation errors
35- except OpenAPIMappingError as exc :
47+ except InvalidOperation as exc :
3648 return RequestValidationResult ([exc , ], None , None )
3749
3850 params , params_errors = self ._get_parameters (
@@ -59,15 +71,15 @@ def _get_parameters(self, request, params):
5971 seen .add ((param_name , param .location .value ))
6072 try :
6173 raw_value = param .get_raw_value (request )
62- except MissingParameter :
63- continue
64- except OpenAPIMappingError as exc :
74+ except MissingRequiredParameter as exc :
6575 errors .append (exc )
6676 continue
77+ except OpenAPIParameterError :
78+ continue
6779
6880 try :
6981 casted = param .cast (raw_value )
70- except OpenAPIMappingError as exc :
82+ except OpenAPIParameterError as exc :
7183 errors .append (exc )
7284 continue
7385
@@ -76,7 +88,7 @@ def _get_parameters(self, request, params):
7688 casted , self .custom_formatters ,
7789 resolver = self .spec ._resolver ,
7890 )
79- except OpenAPIMappingError as exc :
91+ except OpenAPIParameterError as exc :
8092 errors .append (exc )
8193 else :
8294 locations .setdefault (param .location .value , {})
@@ -93,25 +105,25 @@ def _get_body(self, request, operation):
93105 body = None
94106 try :
95107 media_type = operation .request_body [request .mimetype ]
96- except OpenAPIMappingError as exc :
108+ except InvalidContentType as exc :
97109 errors .append (exc )
98110 else :
99111 try :
100112 raw_body = operation .request_body .get_value (request )
101- except OpenAPIMappingError as exc :
113+ except MissingRequestBody as exc :
102114 errors .append (exc )
103115 else :
104116 try :
105117 casted = media_type .cast (raw_body )
106- except OpenAPIMappingError as exc :
118+ except InvalidMediaTypeValue as exc :
107119 errors .append (exc )
108120 else :
109121 try :
110122 body = media_type .unmarshal (
111123 casted , self .custom_formatters ,
112124 resolver = self .spec ._resolver ,
113125 )
114- except OpenAPIMappingError as exc :
126+ except InvalidMediaTypeValue as exc :
115127 errors .append (exc )
116128
117129 return body , errors
0 commit comments