1+ from typing import Callable , Optional
2+
3+
14class CredentialsProvider :
25 def __init__ (
36 self ,
47 username : str = "" ,
58 password : str = "" ,
6- supplier : callable = None ,
9+ supplier : Optional [ Callable ] = None ,
710 * args ,
811 ** kwargs ,
912 ):
@@ -15,27 +18,33 @@ def supplier(arg1, arg2, ...) -> (username, password)
1518 :param args: arguments to pass to the supplier function
1619 :param kwargs: keyword arguments to pass to the supplier function
1720 """
18- self .username = username
19- self .password = password
21+ self ._username = "" if username is None else username
22+ self ._password = "" if password is None else password
2023 self .supplier = supplier
2124 self .args = args
2225 self .kwargs = kwargs
2326
2427 def get_credentials (self ):
2528 if self .supplier :
2629 self .username , self .password = self .supplier (* self .args , ** self .kwargs )
27- if self .username :
28- auth_args = (self .username , self .password or "" )
29- else :
30- auth_args = (self .password ,)
31- return auth_args
30+ return self ._username , self ._password
3231
33- def get_password (self , call_supplier : bool = True ):
34- if call_supplier and self .supplier :
32+ @property
33+ def password (self ):
34+ if self .supplier and not self ._password :
3535 self .username , self .password = self .supplier (* self .args , ** self .kwargs )
36- return self .password
36+ return self ._password
3737
38- def get_username (self , call_supplier : bool = True ):
39- if call_supplier and self .supplier :
38+ @password .setter
39+ def password (self , value ):
40+ self ._password = value
41+
42+ @property
43+ def username (self ):
44+ if self .supplier and not self ._username :
4045 self .username , self .password = self .supplier (* self .args , ** self .kwargs )
41- return self .username
46+ return self ._username
47+
48+ @username .setter
49+ def username (self , value ):
50+ self ._username = value
0 commit comments