@@ -33,7 +33,7 @@ class Credentials(NamedTuple):
33
33
34
34
35
35
class KeyRingCredential (NamedTuple ):
36
- username : str
36
+ username : Optional [ str ]
37
37
password : str
38
38
39
39
@@ -46,30 +46,21 @@ class KeyRingCli:
46
46
PATH.
47
47
"""
48
48
49
- @staticmethod
50
- def _quote (string : Optional [str ]) -> str :
51
- return f"'{ string } '"
52
-
49
+ @classmethod
53
50
def get_credential (
54
- self , service_name : str , username : Optional [str ]
51
+ cls , service_name : str , username : Optional [str ]
55
52
) -> Optional [KeyRingCredential ]:
56
- cmd = ["keyring" , "get" , self . _quote ( service_name ), self . _quote (username )]
57
- res = subprocess .run (cmd )
53
+ cmd = ["keyring" , "get" , service_name , str (username )]
54
+ res = subprocess .run (cmd , capture_output = True )
58
55
if res .returncode :
59
56
return None
60
- return KeyRingCredential (username = username , password = res .stdout )
61
-
62
- def set_password (self , service_name : str , username : str , password : str ) -> None :
63
- cmd = [
64
- "echo" ,
65
- self ._quote (password ),
66
- "|" ,
67
- "keyring" ,
68
- "set" ,
69
- self ._quote (service_name ),
70
- self ._quote (username ),
71
- ]
72
- res = subprocess .run (cmd )
57
+ password = res .stdout .decode ().strip ("\n " )
58
+ return KeyRingCredential (username = username , password = password )
59
+
60
+ @classmethod
61
+ def set_password (cls , service_name : str , username : str , password : str ) -> None :
62
+ cmd = ["keyring" , "set" , service_name , username ]
63
+ res = subprocess .run (cmd , input = password .encode () + b"\n " , capture_output = True )
73
64
if res .returncode :
74
65
raise RuntimeError (res .stderr )
75
66
return None
@@ -79,7 +70,7 @@ def set_password(self, service_name: str, username: str, password: str) -> None:
79
70
import keyring
80
71
except ImportError :
81
72
if shutil .which ("keyring" ) is not None :
82
- keyring = KeyRingCli ()
73
+ keyring = KeyRingCli # type: ignore[assignment]
83
74
keyring = None # type: ignore[assignment]
84
75
except Exception as exc :
85
76
logger .warning (
0 commit comments