88from pydantic import (
99 HttpUrl ,
1010 ValidationError as PydanticValidationError ,
11- validate_call ,
12- TypeAdapter
11+ validate_call
1312)
1413
1514from . import base
@@ -38,7 +37,7 @@ def __init__(
3837 if str (base_url ).endswith ("/" ):
3938 self .base_url = str (base_url )[:- 1 ]
4039 else :
41- self .base_url = base_url
40+ self .base_url = str ( base_url )
4241 self .username = username
4342 self .password = password
4443 self .domain = domain
@@ -51,7 +50,7 @@ def __init__(
5150 self .timeout = timeout
5251
5352 def _basic_login (self ):
54- domain_param = ' ?domain={self.domain}' if self .domain else ''
53+ domain_param = f" ?domain={ self .domain } " if self .domain else ""
5554 r_login = httpx .post (
5655 url = f"{ self .base_url } /api/login{ domain_param } " ,
5756 json = {
@@ -74,7 +73,7 @@ def _basic_login(self):
7473 raise HTTPError ("Authorization failed" )
7574
7675 def _auth0_login (self ):
77- _headers = self .headers
76+ _headers = self .headers . copy ()
7877 _headers ["authorization" ] = f"Bearer { self .auth0_token } "
7978 r_login = httpx .post (
8079 url = f"{ self .base_url } /api/login" ,
@@ -95,21 +94,32 @@ def _auth0_login(self):
9594 raise HTTPError ("Authorization failed" )
9695
9796 def _set_access_token_expires_at (self , response : Token = None ):
98- if response :
97+ if response and response . access_token :
9998 try :
10099 self .access_token_expires_at = jwt .decode (
101100 response .access_token , options = {"verify_signature" : False }
102101 )["exp" ]
103- except (AttributeError , IndexError ):
102+ except (
103+ AttributeError ,
104+ IndexError ,
105+ KeyError ,
106+ TypeError ,
107+ jwt .exceptions .PyJWTError ,
108+ ):
104109 raise HTTPError ("Authorization failed" )
105110 self .access_token = response .access_token
106111 return self .access_token_expires_at
107112
108113 def _access_token_is_expired (self ):
114+ if not self .access_token :
115+ return True
109116 if not self .access_token_expires_at :
110- self ._set_access_token_expires_at (
111- Token (access_token = self .access_token )
112- )
117+ try :
118+ self ._set_access_token_expires_at (
119+ Token (access_token = self .access_token )
120+ )
121+ except (PydanticValidationError , TypeError , HTTPError ):
122+ return True
113123 if (
114124 datetime .fromtimestamp (self .access_token_expires_at )
115125 > datetime .now ()
@@ -118,21 +128,32 @@ def _access_token_is_expired(self):
118128 return True
119129
120130 def _set_refresh_token_expires_at (self , response : Token = None ):
121- if response :
131+ if response and response . refresh_token :
122132 try :
123133 self .refresh_token_expires_at = jwt .decode (
124134 response .refresh_token , options = {"verify_signature" : False }
125135 )["exp" ]
126- except (AttributeError , IndexError ):
136+ except (
137+ AttributeError ,
138+ IndexError ,
139+ KeyError ,
140+ TypeError ,
141+ jwt .exceptions .PyJWTError ,
142+ ):
127143 raise HTTPError ("Authorization failed" )
128144 self .refresh_token = response .refresh_token
129145 return self .refresh_token_expires_at
130146
131147 def _refresh_token_is_expired (self ):
148+ if not self .refresh_token :
149+ return True
132150 if not self .refresh_token_expires_at :
133- self ._set_refresh_token_expires_at (
134- Token (refresh_token = self .refresh_token )
135- )
151+ try :
152+ self ._set_refresh_token_expires_at (
153+ Token (refresh_token = self .refresh_token )
154+ )
155+ except (PydanticValidationError , TypeError , HTTPError ):
156+ return True
136157 if (
137158 datetime .fromtimestamp (self .refresh_token_expires_at )
138159 > datetime .now ()
@@ -142,7 +163,7 @@ def _refresh_token_is_expired(self):
142163
143164 def _refresh_access_token (self ):
144165 if self .refresh_token :
145- _headers = self .headers
166+ _headers = self .headers . copy ()
146167 _headers ["authorization" ] = f"Bearer { self .refresh_token } "
147168 r_refresh_access_token = httpx .get (
148169 url = f"{ self .base_url } /api/login/refresh" ,
@@ -160,7 +181,7 @@ def _refresh_access_token(self):
160181 self ._basic_login ()
161182
162183 def _get_headers (self ):
163- _headers = self .headers
184+ _headers = self .headers . copy ()
164185 if (self .username and self .password ) or \
165186 self .access_token or self .refresh_token or self .auth0_token :
166187 if (
@@ -171,18 +192,22 @@ def _get_headers(self):
171192 self ._refresh_access_token ()
172193 elif self .refresh_token and self ._refresh_token_is_expired () is True :
173194 self .login ()
174- _headers ["authorization" ] = f"Bearer { self .access_token } "
195+ if self .access_token :
196+ _headers ["authorization" ] = f"Bearer { self .access_token } "
175197 return _headers
176198
177199 def token (self ):
200+ expires_at = None
201+ if self .access_token_expires_at is not None :
202+ expires_at = int (self .access_token_expires_at )
178203 return Token (
179204 access_token = self .access_token ,
180205 refresh_token = self .refresh_token ,
181- expires_at = int ( self . access_token_expires_at ) ,
206+ expires_at = expires_at ,
182207 )
183208
184209 def login (self ):
185- r_about = httpx .get (url = f"{ self .base_url } /api" )
210+ r_about = httpx .get (url = f"{ self .base_url } /api" , timeout = self . timeout )
186211 if r_about .status_code == 200 :
187212 try :
188213 about = About (** r_about .json ())
@@ -279,4 +304,21 @@ async def proxy_method(self, *args, **kwargs):
279304 Client ._add_proxy_method (method_name , submodule .sync )
280305
281306 except Exception as e :
282- print (f" ERROR processing { module_info .name } : { e } " )
307+ print (f" ERROR processing { module_info .name } : { e } " )
308+
309+
310+ _METHOD_ALIASES = {
311+ "v3_process_get_report" : "v3_report_get_process" ,
312+ "v3_iam_put_user_policy_list" : "v3_iam_put_user_policy" ,
313+ }
314+
315+ for alias , target in _METHOD_ALIASES .items ():
316+ if hasattr (Client , target ) and not hasattr (Client , alias ):
317+ setattr (Client , alias , getattr (Client , target ))
318+ if hasattr (AsyncClient , target ) and not hasattr (AsyncClient , alias ):
319+ setattr (AsyncClient , alias , getattr (AsyncClient , target ))
320+
321+
322+ # New canonical class names for datarhei MediaCore branding.
323+ MediaCoreClient = Client
324+ AsyncMediaCoreClient = AsyncClient
0 commit comments