7
7
from falcon .response import Response
8
8
9
9
from openapi_core .contrib .falcon .handlers import FalconOpenAPIErrorsHandler
10
+ from openapi_core .contrib .falcon .handlers import (
11
+ FalconOpenAPIValidRequestHandler ,
12
+ )
10
13
from openapi_core .contrib .falcon .requests import FalconOpenAPIRequest
11
14
from openapi_core .contrib .falcon .responses import FalconOpenAPIResponse
12
15
from openapi_core .spec import Spec
13
16
from openapi_core .unmarshalling .processors import UnmarshallingProcessor
14
- from openapi_core .unmarshalling .request .datatypes import RequestUnmarshalResult
15
17
from openapi_core .unmarshalling .request .types import RequestUnmarshallerType
16
- from openapi_core .unmarshalling .response .datatypes import (
17
- ResponseUnmarshalResult ,
18
- )
19
18
from openapi_core .unmarshalling .response .types import ResponseUnmarshallerType
20
19
21
20
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
26
28
27
29
def __init__ (
28
30
self ,
29
31
spec : Spec ,
30
32
request_unmarshaller_cls : Optional [RequestUnmarshallerType ] = None ,
31
33
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 ,
35
39
** unmarshaller_kwargs : Any ,
36
40
):
37
41
super ().__init__ (
@@ -40,70 +44,48 @@ def __init__(
40
44
response_unmarshaller_cls = response_unmarshaller_cls ,
41
45
** unmarshaller_kwargs ,
42
46
)
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
46
50
47
51
@classmethod
48
52
def from_spec (
49
53
cls ,
50
54
spec : Spec ,
51
55
request_unmarshaller_cls : Optional [RequestUnmarshallerType ] = None ,
52
56
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 ,
56
62
** unmarshaller_kwargs : Any ,
57
63
) -> "FalconOpenAPIMiddleware" :
58
64
return cls (
59
65
spec ,
60
66
request_unmarshaller_cls = request_unmarshaller_cls ,
61
67
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 ,
65
71
** unmarshaller_kwargs ,
66
72
)
67
73
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 )
73
78
74
- def process_response ( # type: ignore
79
+ def process_response (
75
80
self , req : Request , resp : Response , resource : Any , req_succeeded : bool
76
81
) -> 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 )
102
84
103
85
def _get_openapi_request (self , request : Request ) -> FalconOpenAPIRequest :
104
- return self .request_class (request )
86
+ return self .request_cls (request )
105
87
106
88
def _get_openapi_response (
107
89
self , response : Response
108
90
) -> FalconOpenAPIResponse :
109
- return self .response_class (response )
91
+ return self .response_cls (response )
0 commit comments