22import logging
33
44from okdata .sdk .auth .credentials .client_credentials import ClientCredentialsProvider
5- from okdata .sdk .auth .credentials .common import TokenProviderNotInitialized
5+ from okdata .sdk .auth .credentials .common import (
6+ TokenProviderNotInitialized ,
7+ TokenRefreshError ,
8+ )
69from okdata .sdk .auth .credentials .password_grant import TokenServiceProvider
710from okdata .sdk .auth .util import is_token_expired
811from okdata .sdk .exceptions import ApiAuthenticateError
@@ -55,16 +58,6 @@ def access_token(self):
5558 self .refresh_access_token ()
5659 return self ._access_token
5760
58- # read only
59- @property
60- def refresh_token (self ):
61- if not self .token_provider :
62- return None
63- # If expired, relog
64- if is_token_expired (self ._refresh_token ):
65- self .token_provider .new_token ()
66- return self ._refresh_token
67-
6861 def login (self , force = False ):
6962 if not self .token_provider :
7063 return
@@ -77,21 +70,26 @@ def login(self, force=False):
7770 if self ._access_token and not is_token_expired (self ._access_token ):
7871 log .info ("Token not expired, skipping" )
7972 return
80- tokens = self .token_provider .new_token ()
81- if "access_token" not in tokens :
82- raise ApiAuthenticateError
83- self ._access_token = tokens ["access_token" ]
84- self ._refresh_token = tokens ["refresh_token" ]
85- self .file_cache .write_credentials (credentials = self )
73+ self .refresh_access_token ()
8674
8775 def refresh_access_token (self ):
8876 if not self .token_provider :
8977 return
9078
91- if is_token_expired (self ._refresh_token ):
79+ tokens = None
80+
81+ if self ._refresh_token and not is_token_expired (self ._refresh_token ):
82+ try :
83+ tokens = self .token_provider .refresh_token (self ._refresh_token )
84+ except TokenRefreshError as e :
85+ log .warn (f"Error refreshing token: { e } " )
86+
87+ if not tokens :
9288 tokens = self .token_provider .new_token ()
93- else :
94- tokens = self .token_provider .refresh_token (self .refresh_token )
89+ if "access_token" not in tokens :
90+ raise ApiAuthenticateError
91+ self ._refresh_token = tokens ["refresh_token" ]
92+
9593 self ._access_token = tokens ["access_token" ]
9694 self .file_cache .write_credentials (credentials = self )
9795
0 commit comments