66from falcon .request import Request
77from falcon .response import Response
88
9- from openapi_core .contrib .falcon .handlers import FalconOpenAPIErrorsHandler
9+ from openapi_core .contrib .falcon .handlers import (
10+ FalconOpenAPIErrorsHandler ,
11+ FalconOpenAPIValidRequestHandler ,
12+ )
1013from openapi_core .contrib .falcon .requests import FalconOpenAPIRequest
1114from openapi_core .contrib .falcon .responses import FalconOpenAPIResponse
15+ from openapi_core .protocols import ErrorsHandler
1216from openapi_core .spec import Spec
1317from openapi_core .unmarshalling .processors import UnmarshallingProcessor
14- from openapi_core .unmarshalling .request .datatypes import RequestUnmarshalResult
1518from openapi_core .unmarshalling .request .types import RequestUnmarshallerType
16- from openapi_core .unmarshalling .response .datatypes import (
17- ResponseUnmarshalResult ,
18- )
1919from openapi_core .unmarshalling .response .types import ResponseUnmarshallerType
2020
2121
22- class FalconOpenAPIMiddleware (UnmarshallingProcessor ):
23- request_class = FalconOpenAPIRequest
24- response_class = FalconOpenAPIResponse
25- errors_handler = FalconOpenAPIErrorsHandler ()
22+ class FalconOpenAPIMiddleware (UnmarshallingProcessor [Request , Response ]):
23+ request_cls = FalconOpenAPIRequest
24+ response_cls = FalconOpenAPIResponse
25+ valid_request_handler_cls = FalconOpenAPIValidRequestHandler
26+ errors_handler_cls : Type [FalconOpenAPIErrorsHandler ] = FalconOpenAPIErrorsHandler
2627
2728 def __init__ (
2829 self ,
2930 spec : Spec ,
3031 request_unmarshaller_cls : Optional [RequestUnmarshallerType ] = None ,
3132 response_unmarshaller_cls : Optional [ResponseUnmarshallerType ] = None ,
32- request_class : Type [FalconOpenAPIRequest ] = FalconOpenAPIRequest ,
33- response_class : Type [FalconOpenAPIResponse ] = FalconOpenAPIResponse ,
34- errors_handler : Optional [FalconOpenAPIErrorsHandler ] = None ,
33+ request_cls : Type [FalconOpenAPIRequest ] = FalconOpenAPIRequest ,
34+ response_cls : Type [FalconOpenAPIResponse ] = FalconOpenAPIResponse ,
35+ errors_handler_cls : Type [FalconOpenAPIErrorsHandler ] = FalconOpenAPIErrorsHandler ,
3536 ** unmarshaller_kwargs : Any ,
3637 ):
3738 super ().__init__ (
@@ -40,70 +41,46 @@ def __init__(
4041 response_unmarshaller_cls = response_unmarshaller_cls ,
4142 ** unmarshaller_kwargs ,
4243 )
43- self .request_class = request_class or self .request_class
44- self .response_class = response_class or self .response_class
45- self .errors_handler = errors_handler or self .errors_handler
44+ self .request_cls = request_cls or self .request_cls
45+ self .response_cls = response_cls or self .response_cls
46+ self .errors_handler_cls = errors_handler_cls or self .errors_handler_cls
4647
4748 @classmethod
4849 def from_spec (
4950 cls ,
5051 spec : Spec ,
5152 request_unmarshaller_cls : Optional [RequestUnmarshallerType ] = None ,
5253 response_unmarshaller_cls : Optional [ResponseUnmarshallerType ] = None ,
53- request_class : Type [FalconOpenAPIRequest ] = FalconOpenAPIRequest ,
54- response_class : Type [FalconOpenAPIResponse ] = FalconOpenAPIResponse ,
55- errors_handler : Optional [FalconOpenAPIErrorsHandler ] = None ,
54+ request_cls : Type [FalconOpenAPIRequest ] = FalconOpenAPIRequest ,
55+ response_cls : Type [FalconOpenAPIResponse ] = FalconOpenAPIResponse ,
56+ errors_handler_cls : Type [FalconOpenAPIErrorsHandler ] = FalconOpenAPIErrorsHandler ,
5657 ** unmarshaller_kwargs : Any ,
5758 ) -> "FalconOpenAPIMiddleware" :
5859 return cls (
5960 spec ,
6061 request_unmarshaller_cls = request_unmarshaller_cls ,
6162 response_unmarshaller_cls = response_unmarshaller_cls ,
62- request_class = request_class ,
63- response_class = response_class ,
64- errors_handler = errors_handler ,
63+ request_cls = request_cls ,
64+ response_cls = response_cls ,
65+ errors_handler_cls = errors_handler_cls ,
6566 ** unmarshaller_kwargs ,
6667 )
6768
68- def process_request (self , req : Request , resp : Response ) -> None : # type: ignore
69- openapi_req = self ._get_openapi_request (req )
70- req .context .openapi = super ().process_request (openapi_req )
71- if req .context .openapi .errors :
72- return self ._handle_request_errors (req , resp , req .context .openapi )
69+ def process_request (self , req : Request , resp : Response ) -> None :
70+ valid_handler = self .valid_request_handler_cls (req , resp )
71+ errors_handler = self .errors_handler_cls (req , resp )
72+ self .handle_request (req , valid_handler , errors_handler )
7373
74- def process_response ( # type: ignore
74+ def process_response (
7575 self , req : Request , resp : Response , resource : Any , req_succeeded : bool
7676 ) -> None :
77- openapi_req = self ._get_openapi_request (req )
78- openapi_resp = self ._get_openapi_response (resp )
79- resp .context .openapi = super ().process_response (
80- openapi_req , openapi_resp
81- )
82- if resp .context .openapi .errors :
83- return self ._handle_response_errors (
84- req , resp , resp .context .openapi
85- )
86-
87- def _handle_request_errors (
88- self ,
89- req : Request ,
90- resp : Response ,
91- request_result : RequestUnmarshalResult ,
92- ) -> None :
93- return self .errors_handler .handle (req , resp , request_result .errors )
94-
95- def _handle_response_errors (
96- self ,
97- req : Request ,
98- resp : Response ,
99- response_result : ResponseUnmarshalResult ,
100- ) -> None :
101- return self .errors_handler .handle (req , resp , response_result .errors )
77+ errors_handler = self .errors_handler_cls (req , resp )
78+ self .handle_response (req , resp , errors_handler )
10279
10380 def _get_openapi_request (self , request : Request ) -> FalconOpenAPIRequest :
104- return self .request_class (request )
81+ return self .request_cls (request )
10582
10683 def _get_openapi_response (
10784 self , response : Response
10885 ) -> FalconOpenAPIResponse :
109- return self .response_class (response )
86+ return self .response_cls (response )
0 commit comments