99import requests
1010
1111from requests .adapters import HTTPAdapter
12+ from requests .auth import AuthBase
1213from urllib3 .util import Retry
1314
1415import typing as t
@@ -34,7 +35,7 @@ def __init__(
3435 tenant_id : t .Optional [int ] = None ,
3536 session : t .Optional [requests .Session ] = None ,
3637 api_domain : t .Optional [str ] = None ,
37- _disable_auth : bool = False ,
38+ _auth : AuthBase | None = None ,
3839 _enable_beta_features : bool = False ,
3940 ) -> None :
4041 if not api_key :
@@ -52,9 +53,9 @@ def __init__(
5253 self ._api_key : str = api_key
5354 self ._tenant_id : t .Optional [int ] = tenant_id
5455
56+ self ._auth : t .Optional [AuthBase ] = _auth
5557 self ._api_token : t .Optional [str ] = None
5658 self ._api_token_exp : t .Optional [datetime ] = None
57- self ._disable_auth : bool = _disable_auth
5859 self ._session = session or self ._create_session ()
5960
6061 @classmethod
@@ -135,16 +136,24 @@ def generate_token(self) -> str:
135136
136137 return token
137138
138- def _auth_headers (self ) -> dict :
139- if self ._disable_auth :
140- return dict ()
139+ def _apply_auth (
140+ self ,
141+ * ,
142+ request : requests .PreparedRequest ,
143+ ) -> requests .PreparedRequest :
144+ if self ._auth :
145+ self ._auth (request )
146+ return request
147+
141148 api_token : t .Optional [str ] = self ._api_token
142149 if not api_token or (
143150 self ._api_token_exp and self ._api_token_exp < datetime .now ()
144151 ):
145152 api_token = self .generate_token ()
146153
147- return {"Authorization" : f"Bearer { api_token } " }
154+ request .headers ["Authorization" ] = f"Bearer { api_token } "
155+
156+ return request
148157
149158 def _request (
150159 self ,
@@ -163,19 +172,20 @@ def _request(
163172 f"Client was used to access { netloc = } at { url = } . Only the domain { self ._api_domain } is supported."
164173 )
165174
166- headers = {
167- ** (headers or {}),
168- ** self ._auth_headers (),
169- }
170-
171- return self ._session .request (
175+ request = requests .Request (
172176 method = method ,
173177 url = url ,
174178 params = params ,
175179 json = json ,
176180 headers = headers ,
177181 )
178182
183+ prepared = self ._session .prepare_request (request )
184+ prepared = self ._apply_auth (request = prepared )
185+ resp = self ._session .send (prepared )
186+
187+ return resp
188+
179189 def post (
180190 self ,
181191 url : str ,
0 commit comments