2828from openapi_core .spec .paths import Spec
2929from openapi_core .templating .media_types .exceptions import MediaTypeFinderError
3030from openapi_core .templating .paths .exceptions import PathError
31- from openapi_core .unmarshalling .schemas .enums import UnmarshalContext
31+ from openapi_core .unmarshalling .schemas import (
32+ oas30_request_schema_unmarshallers_factory ,
33+ )
34+ from openapi_core .unmarshalling .schemas import (
35+ oas31_schema_unmarshallers_factory ,
36+ )
3237from openapi_core .unmarshalling .schemas .exceptions import UnmarshalError
3338from openapi_core .unmarshalling .schemas .exceptions import ValidateError
3439from openapi_core .unmarshalling .schemas .factories import (
5055
5156
5257class BaseRequestValidator (BaseValidator ):
58+
59+ schema_unmarshallers_factories = {
60+ ("openapi" , "3.0" ): oas30_request_schema_unmarshallers_factory ,
61+ ("openapi" , "3.1" ): oas31_schema_unmarshallers_factory ,
62+ }
63+
5364 def __init__ (
5465 self ,
55- schema_unmarshallers_factory : SchemaUnmarshallersFactory ,
66+ spec : Spec ,
67+ base_url : Optional [str ] = None ,
68+ schema_unmarshallers_factory : Optional [
69+ SchemaUnmarshallersFactory
70+ ] = None ,
5671 schema_casters_factory : SchemaCastersFactory = schema_casters_factory ,
5772 parameter_deserializers_factory : ParameterDeserializersFactory = parameter_deserializers_factory ,
5873 media_type_deserializers_factory : MediaTypeDeserializersFactory = media_type_deserializers_factory ,
5974 security_provider_factory : SecurityProviderFactory = security_provider_factory ,
6075 ):
6176 super ().__init__ (
62- schema_unmarshallers_factory ,
77+ spec ,
78+ base_url = base_url ,
79+ schema_unmarshallers_factory = schema_unmarshallers_factory ,
6380 schema_casters_factory = schema_casters_factory ,
6481 parameter_deserializers_factory = parameter_deserializers_factory ,
6582 media_type_deserializers_factory = media_type_deserializers_factory ,
6683 )
6784 self .security_provider_factory = security_provider_factory
6885
69- def iter_errors (
70- self ,
71- spec : Spec ,
72- request : Request ,
73- base_url : Optional [str ] = None ,
74- ) -> Iterator [Exception ]:
75- result = self .validate (spec , request , base_url = base_url )
86+ def iter_errors (self , request : Request ) -> Iterator [Exception ]:
87+ result = self .validate (request )
7688 yield from result .errors
7789
78- def validate (
79- self ,
80- spec : Spec ,
81- request : Request ,
82- base_url : Optional [str ] = None ,
83- ) -> RequestValidationResult :
90+ def validate (self , request : Request ) -> RequestValidationResult :
8491 raise NotImplementedError
8592
8693 def _get_parameters (
@@ -143,11 +150,11 @@ def _get_parameter(self, param: Spec, request: Request) -> Any:
143150 raise MissingParameter (name )
144151
145152 def _get_security (
146- self , spec : Spec , request : Request , operation : Spec
153+ self , request : Request , operation : Spec
147154 ) -> Optional [Dict [str , str ]]:
148155 security = None
149- if "security" in spec :
150- security = spec / "security"
156+ if "security" in self . spec :
157+ security = self . spec / "security"
151158 if "security" in operation :
152159 security = operation / "security"
153160
@@ -157,20 +164,16 @@ def _get_security(
157164 for security_requirement in security :
158165 try :
159166 return {
160- scheme_name : self ._get_security_value (
161- spec , scheme_name , request
162- )
167+ scheme_name : self ._get_security_value (scheme_name , request )
163168 for scheme_name in list (security_requirement .keys ())
164169 }
165170 except SecurityError :
166171 continue
167172
168173 raise InvalidSecurity
169174
170- def _get_security_value (
171- self , spec : Spec , scheme_name : str , request : Request
172- ) -> Any :
173- security_schemes = spec / "components#securitySchemes"
175+ def _get_security_value (self , scheme_name : str , request : Request ) -> Any :
176+ security_schemes = self .spec / "components#securitySchemes"
174177 if scheme_name not in security_schemes :
175178 return
176179 scheme = security_schemes [scheme_name ]
@@ -207,16 +210,9 @@ def _get_body_value(self, request_body: Spec, request: Request) -> Any:
207210
208211
209212class RequestParametersValidator (BaseRequestValidator ):
210- def validate (
211- self ,
212- spec : Spec ,
213- request : Request ,
214- base_url : Optional [str ] = None ,
215- ) -> RequestValidationResult :
213+ def validate (self , request : Request ) -> RequestValidationResult :
216214 try :
217- path , operation , _ , path_result , _ = self ._find_path (
218- spec , request , base_url = base_url
219- )
215+ path , operation , _ , path_result , _ = self ._find_path (request )
220216 except PathError as exc :
221217 return RequestValidationResult (errors = [exc ])
222218
@@ -239,16 +235,9 @@ def validate(
239235
240236
241237class RequestBodyValidator (BaseRequestValidator ):
242- def validate (
243- self ,
244- spec : Spec ,
245- request : Request ,
246- base_url : Optional [str ] = None ,
247- ) -> RequestValidationResult :
238+ def validate (self , request : Request ) -> RequestValidationResult :
248239 try :
249- _ , operation , _ , _ , _ = self ._find_path (
250- spec , request , base_url = base_url
251- )
240+ _ , operation , _ , _ , _ = self ._find_path (request )
252241 except PathError as exc :
253242 return RequestValidationResult (errors = [exc ])
254243
@@ -277,21 +266,14 @@ def validate(
277266
278267
279268class RequestSecurityValidator (BaseRequestValidator ):
280- def validate (
281- self ,
282- spec : Spec ,
283- request : Request ,
284- base_url : Optional [str ] = None ,
285- ) -> RequestValidationResult :
269+ def validate (self , request : Request ) -> RequestValidationResult :
286270 try :
287- _ , operation , _ , _ , _ = self ._find_path (
288- spec , request , base_url = base_url
289- )
271+ _ , operation , _ , _ , _ = self ._find_path (request )
290272 except PathError as exc :
291273 return RequestValidationResult (errors = [exc ])
292274
293275 try :
294- security = self ._get_security (spec , request , operation )
276+ security = self ._get_security (request , operation )
295277 except InvalidSecurity as exc :
296278 return RequestValidationResult (errors = [exc ])
297279
@@ -302,22 +284,15 @@ def validate(
302284
303285
304286class RequestValidator (BaseRequestValidator ):
305- def validate (
306- self ,
307- spec : Spec ,
308- request : Request ,
309- base_url : Optional [str ] = None ,
310- ) -> RequestValidationResult :
287+ def validate (self , request : Request ) -> RequestValidationResult :
311288 try :
312- path , operation , _ , path_result , _ = self ._find_path (
313- spec , request , base_url = base_url
314- )
289+ path , operation , _ , path_result , _ = self ._find_path (request )
315290 # don't process if operation errors
316291 except PathError as exc :
317292 return RequestValidationResult (errors = [exc ])
318293
319294 try :
320- security = self ._get_security (spec , request , operation )
295+ security = self ._get_security (request , operation )
321296 except InvalidSecurity as exc :
322297 return RequestValidationResult (errors = [exc ])
323298
0 commit comments