77from dataclasses_json import DataClassJsonMixin
88
99
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+
1124 sec_fields : Tuple [Field , ...] = fields (security )
1225 for sec_field in sec_fields :
1326 value = getattr (security , sec_field .name )
@@ -23,8 +36,10 @@ def configure_security_client(client: requests.Session, security: dataclass):
2336 elif metadata .get ('scheme' ):
2437 _parse_security_scheme (client , metadata , value )
2538
39+ return client
40+
2641
27- def _parse_security_option (client : requests . Session , option : dataclass ):
42+ def _parse_security_option (client : SecurityClient , option : dataclass ):
2843 opt_fields : Tuple [Field , ...] = fields (option )
2944 for opt_field in opt_fields :
3045 metadata = opt_field .metadata .get ('security' )
@@ -34,7 +49,7 @@ def _parse_security_option(client: requests.Session, option: dataclass):
3449 'scheme' ), getattr (option , opt_field .name ))
3550
3651
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 ):
3853 scheme_fields : Tuple [Field , ...] = fields (scheme )
3954 for scheme_field in scheme_fields :
4055 metadata = scheme_field .metadata .get ('security' )
@@ -47,20 +62,24 @@ def _parse_security_scheme(client: requests.Session, scheme_metadata: dict, sche
4762
4863 if scheme_type == "apiKey" :
4964 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
5170 else :
52- raise Exception ('not yet implemented ' )
71+ raise Exception ('not supported ' )
5372 elif scheme_type == "openIdConnect" :
54- client .headers [header_name ] = value
73+ client .client . headers [header_name ] = value
5574 elif scheme_type == 'oauth2' :
56- client .headers [header_name ] = value
75+ client .client . headers [header_name ] = value
5776 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
6079 else :
61- raise Exception ('not yet implemented ' )
80+ raise Exception ('not supported ' )
6281 else :
63- raise Exception ('not yet implemented ' )
82+ raise Exception ('not supported ' )
6483
6584
6685def generate_url (server_url : str , path : str , path_params : dataclass ) -> str :
0 commit comments