2
2
from itertools import chain
3
3
from six import iteritems
4
4
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
7
15
from openapi_core .validation .request .datatypes import (
8
16
RequestParameters , RequestValidationResult ,
9
17
)
@@ -20,7 +28,7 @@ def validate(self, request):
20
28
try :
21
29
server = self .spec .get_server (request .full_url_pattern )
22
30
# don't process if server errors
23
- except OpenAPIMappingError as exc :
31
+ except InvalidServer as exc :
24
32
return RequestValidationResult ([exc , ], None , None )
25
33
26
34
operation_pattern = get_operation_pattern (
@@ -29,10 +37,14 @@ def validate(self, request):
29
37
30
38
try :
31
39
path = self .spec [operation_pattern ]
40
+ except InvalidPath as exc :
41
+ return RequestValidationResult ([exc , ], None , None )
42
+
43
+ try :
32
44
operation = self .spec .get_operation (
33
45
operation_pattern , request .method )
34
46
# don't process if operation errors
35
- except OpenAPIMappingError as exc :
47
+ except InvalidOperation as exc :
36
48
return RequestValidationResult ([exc , ], None , None )
37
49
38
50
params , params_errors = self ._get_parameters (
@@ -59,15 +71,15 @@ def _get_parameters(self, request, params):
59
71
seen .add ((param_name , param .location .value ))
60
72
try :
61
73
raw_value = param .get_raw_value (request )
62
- except MissingParameter :
63
- continue
64
- except OpenAPIMappingError as exc :
74
+ except MissingRequiredParameter as exc :
65
75
errors .append (exc )
66
76
continue
77
+ except OpenAPIParameterError :
78
+ continue
67
79
68
80
try :
69
81
casted = param .cast (raw_value )
70
- except OpenAPIMappingError as exc :
82
+ except OpenAPIParameterError as exc :
71
83
errors .append (exc )
72
84
continue
73
85
@@ -76,7 +88,7 @@ def _get_parameters(self, request, params):
76
88
casted , self .custom_formatters ,
77
89
resolver = self .spec ._resolver ,
78
90
)
79
- except OpenAPIMappingError as exc :
91
+ except OpenAPIParameterError as exc :
80
92
errors .append (exc )
81
93
else :
82
94
locations .setdefault (param .location .value , {})
@@ -93,25 +105,25 @@ def _get_body(self, request, operation):
93
105
body = None
94
106
try :
95
107
media_type = operation .request_body [request .mimetype ]
96
- except OpenAPIMappingError as exc :
108
+ except InvalidContentType as exc :
97
109
errors .append (exc )
98
110
else :
99
111
try :
100
112
raw_body = operation .request_body .get_value (request )
101
- except OpenAPIMappingError as exc :
113
+ except MissingRequestBody as exc :
102
114
errors .append (exc )
103
115
else :
104
116
try :
105
117
casted = media_type .cast (raw_body )
106
- except OpenAPIMappingError as exc :
118
+ except InvalidMediaTypeValue as exc :
107
119
errors .append (exc )
108
120
else :
109
121
try :
110
122
body = media_type .unmarshal (
111
123
casted , self .custom_formatters ,
112
124
resolver = self .spec ._resolver ,
113
125
)
114
- except OpenAPIMappingError as exc :
126
+ except InvalidMediaTypeValue as exc :
115
127
errors .append (exc )
116
128
117
129
return body , errors
0 commit comments