@@ -14,13 +14,15 @@ def typename(obj):
1414class AuthMixin (ABC ):
1515 def __init__ (self , address , options = None ):
1616 self .address = address .rstrip ("/" )
17+ if not options :
18+ options = {}
19+ self ._auto_save_token = options .get ("auto_save_token" , True )
1720 tn = typename (self ).lower ()
1821 try :
19- self .config = Config (f".{ tn } -tokens" )
22+ self .config = Config (f".{ tn } -tokens" , auto_save_token = self . _auto_save_token )
2023 except JSONDecodeError :
2124 self .config = {}
22- if not options :
23- options = {}
25+
2426 self ._token = options .get ("token" )
2527 self ._username = options .get ("username" )
2628 self ._password = options .get ("password" )
@@ -39,19 +41,33 @@ def authenticate(self, username, password):
3941 def token (self ):
4042 return self ._retrieve_token ()
4143
44+ def reset_token (self ):
45+ self ._token = None
46+
4247 def _retrieve_token (self ):
4348 username = self ._username or getpass .getuser ()
44- token = self ._token
45- if token is None :
46- try :
47- token = self .config [username ]
48- except KeyError :
49- tn = typename (self )
50- password = self ._password or getpass .getpass (
51- prompt = f"{ tn } password for { username } : "
52- )
53- token = self .authenticate (username , password )
54- self .config [username ] = self ._token = token
49+
50+ if self ._token :
51+ # If a token is already set (either from options or from a previous authentication), use it.
52+ return self ._token
53+
54+ if not self ._auto_save_token :
55+ # If auto-saving is disabled, authenticate without checking the config.
56+ self ._token = self ._authenticate ()
57+ return self ._token
58+
59+ try :
60+ self ._token = self .config [username ]
61+ except KeyError :
62+ self ._token = self ._authenticate ()
63+ self .config [username ] = self ._token
64+ return self ._token
65+
66+ def _authenticate (self ):
67+ tn = typename (self )
68+ username = self ._username or getpass .getuser ()
69+ password = self ._password or getpass .getpass (prompt = f"{ tn } password for { username } : " )
70+ token = self .authenticate (username , password )
5571 return token
5672
5773
0 commit comments