7
7
from dataclasses_json import DataClassJsonMixin
8
8
9
9
10
- def configure_security_client (client : requests .Session , security : dataclass ):
10
+ class SecurityClient :
11
+ client : requests .Session = requests .Session ()
12
+ query_params : dict [str , str ] = {}
13
+
14
+ def request (self , method , url , ** kwargs ):
15
+ params = kwargs .get ('params' , {})
16
+ kwargs ["params" ] = self .query_params | params
17
+
18
+ return self .client .request (method , url , ** kwargs )
19
+
20
+
21
+ def configure_security_client (security : dataclass ):
22
+ client = SecurityClient ()
23
+
11
24
sec_fields : Tuple [Field , ...] = fields (security )
12
25
for sec_field in sec_fields :
13
26
value = getattr (security , sec_field .name )
@@ -23,8 +36,10 @@ def configure_security_client(client: requests.Session, security: dataclass):
23
36
elif metadata .get ('scheme' ):
24
37
_parse_security_scheme (client , metadata , value )
25
38
39
+ return client
40
+
26
41
27
- def _parse_security_option (client : requests . Session , option : dataclass ):
42
+ def _parse_security_option (client : SecurityClient , option : dataclass ):
28
43
opt_fields : Tuple [Field , ...] = fields (option )
29
44
for opt_field in opt_fields :
30
45
metadata = opt_field .metadata .get ('security' )
@@ -34,7 +49,7 @@ def _parse_security_option(client: requests.Session, option: dataclass):
34
49
'scheme' ), getattr (option , opt_field .name ))
35
50
36
51
37
- def _parse_security_scheme (client : requests . Session , scheme_metadata : dict , scheme : dataclass ):
52
+ def _parse_security_scheme (client : SecurityClient , scheme_metadata : dict , scheme : dataclass ):
38
53
scheme_fields : Tuple [Field , ...] = fields (scheme )
39
54
for scheme_field in scheme_fields :
40
55
metadata = scheme_field .metadata .get ('security' )
@@ -47,20 +62,24 @@ def _parse_security_scheme(client: requests.Session, scheme_metadata: dict, sche
47
62
48
63
if scheme_type == "apiKey" :
49
64
if scheme_metadata .get ('sub_type' ) == 'header' :
50
- client .headers [header_name ] = value
65
+ client .client .headers [header_name ] = value
66
+ elif scheme_metadata .get ('sub_type' ) == 'query' :
67
+ client .query_params [header_name ] = value
68
+ elif scheme_metadata .get ('sub_type' ) == 'cookie' :
69
+ client .client .cookies [header_name ] = value
51
70
else :
52
- raise Exception ('not yet implemented ' )
71
+ raise Exception ('not supported ' )
53
72
elif scheme_type == "openIdConnect" :
54
- client .headers [header_name ] = value
73
+ client .client . headers [header_name ] = value
55
74
elif scheme_type == 'oauth2' :
56
- client .headers [header_name ] = value
75
+ client .client . headers [header_name ] = value
57
76
elif scheme_type == 'http' :
58
- if scheme_metadata .get ('sub_type' ) == 'bearer' :
59
- client .headers [header_name ] = value
77
+ if scheme_metadata .get ('sub_type' ) == 'bearer' or scheme_metadata . get ( 'sub_type' ) == 'basic' :
78
+ client .client . headers [header_name ] = value
60
79
else :
61
- raise Exception ('not yet implemented ' )
80
+ raise Exception ('not supported ' )
62
81
else :
63
- raise Exception ('not yet implemented ' )
82
+ raise Exception ('not supported ' )
64
83
65
84
66
85
def generate_url (server_url : str , path : str , path_params : dataclass ) -> str :
0 commit comments