77from falcon .response import Response
88
99from openapi_core .contrib .falcon .handlers import FalconOpenAPIErrorsHandler
10+ from openapi_core .contrib .falcon .handlers import (
11+ FalconOpenAPIValidRequestHandler ,
12+ )
1013from openapi_core .contrib .falcon .requests import FalconOpenAPIRequest
1114from openapi_core .contrib .falcon .responses import FalconOpenAPIResponse
1215from openapi_core .spec import Spec
1316from openapi_core .unmarshalling .processors import UnmarshallingProcessor
14- from openapi_core .unmarshalling .request .datatypes import RequestUnmarshalResult
1517from openapi_core .unmarshalling .request .types import RequestUnmarshallerType
16- from openapi_core .unmarshalling .response .datatypes import (
17- ResponseUnmarshalResult ,
18- )
1918from openapi_core .unmarshalling .response .types import ResponseUnmarshallerType
2019
2120
22- class FalconOpenAPIMiddleware (UnmarshallingProcessor ):
23- request_class = FalconOpenAPIRequest
24- response_class = FalconOpenAPIResponse
25- errors_handler = FalconOpenAPIErrorsHandler ()
21+ class FalconOpenAPIMiddleware (UnmarshallingProcessor [Request , Response ]):
22+ request_cls = FalconOpenAPIRequest
23+ response_cls = FalconOpenAPIResponse
24+ valid_request_handler_cls = FalconOpenAPIValidRequestHandler
25+ errors_handler_cls : Type [
26+ FalconOpenAPIErrorsHandler
27+ ] = FalconOpenAPIErrorsHandler
2628
2729 def __init__ (
2830 self ,
2931 spec : Spec ,
3032 request_unmarshaller_cls : Optional [RequestUnmarshallerType ] = None ,
3133 response_unmarshaller_cls : Optional [ResponseUnmarshallerType ] = None ,
32- request_class : Type [FalconOpenAPIRequest ] = FalconOpenAPIRequest ,
33- response_class : Type [FalconOpenAPIResponse ] = FalconOpenAPIResponse ,
34- errors_handler : Optional [FalconOpenAPIErrorsHandler ] = None ,
34+ request_cls : Type [FalconOpenAPIRequest ] = FalconOpenAPIRequest ,
35+ response_cls : Type [FalconOpenAPIResponse ] = FalconOpenAPIResponse ,
36+ errors_handler_cls : Type [
37+ FalconOpenAPIErrorsHandler
38+ ] = FalconOpenAPIErrorsHandler ,
3539 ** unmarshaller_kwargs : Any ,
3640 ):
3741 super ().__init__ (
@@ -40,70 +44,48 @@ def __init__(
4044 response_unmarshaller_cls = response_unmarshaller_cls ,
4145 ** unmarshaller_kwargs ,
4246 )
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
47+ self .request_cls = request_cls or self .request_cls
48+ self .response_cls = response_cls or self .response_cls
49+ self .errors_handler_cls = errors_handler_cls or self .errors_handler_cls
4650
4751 @classmethod
4852 def from_spec (
4953 cls ,
5054 spec : Spec ,
5155 request_unmarshaller_cls : Optional [RequestUnmarshallerType ] = None ,
5256 response_unmarshaller_cls : Optional [ResponseUnmarshallerType ] = None ,
53- request_class : Type [FalconOpenAPIRequest ] = FalconOpenAPIRequest ,
54- response_class : Type [FalconOpenAPIResponse ] = FalconOpenAPIResponse ,
55- errors_handler : Optional [FalconOpenAPIErrorsHandler ] = None ,
57+ request_cls : Type [FalconOpenAPIRequest ] = FalconOpenAPIRequest ,
58+ response_cls : Type [FalconOpenAPIResponse ] = FalconOpenAPIResponse ,
59+ errors_handler_cls : Type [
60+ FalconOpenAPIErrorsHandler
61+ ] = FalconOpenAPIErrorsHandler ,
5662 ** unmarshaller_kwargs : Any ,
5763 ) -> "FalconOpenAPIMiddleware" :
5864 return cls (
5965 spec ,
6066 request_unmarshaller_cls = request_unmarshaller_cls ,
6167 response_unmarshaller_cls = response_unmarshaller_cls ,
62- request_class = request_class ,
63- response_class = response_class ,
64- errors_handler = errors_handler ,
68+ request_cls = request_cls ,
69+ response_cls = response_cls ,
70+ errors_handler_cls = errors_handler_cls ,
6571 ** unmarshaller_kwargs ,
6672 )
6773
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 )
74+ def process_request (self , req : Request , resp : Response ) -> None :
75+ valid_handler = self .valid_request_handler_cls (req , resp )
76+ errors_handler = self .errors_handler_cls (req , resp )
77+ self .handle_request (req , valid_handler , errors_handler )
7378
74- def process_response ( # type: ignore
79+ def process_response (
7580 self , req : Request , resp : Response , resource : Any , req_succeeded : bool
7681 ) -> 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 )
82+ errors_handler = self .errors_handler_cls (req , resp )
83+ self .handle_response (req , resp , errors_handler )
10284
10385 def _get_openapi_request (self , request : Request ) -> FalconOpenAPIRequest :
104- return self .request_class (request )
86+ return self .request_cls (request )
10587
10688 def _get_openapi_response (
10789 self , response : Response
10890 ) -> FalconOpenAPIResponse :
109- return self .response_class (response )
91+ return self .response_cls (response )
0 commit comments