Skip to content

Commit 4cbae5b

Browse files
committed
Improve cli interface
1 parent edc588c commit 4cbae5b

File tree

1 file changed

+13
-22
lines changed

1 file changed

+13
-22
lines changed

src/pip/_internal/network/auth.py

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class Credentials(NamedTuple):
3333

3434

3535
class KeyRingCredential(NamedTuple):
36-
username: str
36+
username: Optional[str]
3737
password: str
3838

3939

@@ -46,30 +46,21 @@ class KeyRingCli:
4646
PATH.
4747
"""
4848

49-
@staticmethod
50-
def _quote(string: Optional[str]) -> str:
51-
return f"'{string}'"
52-
49+
@classmethod
5350
def get_credential(
54-
self, service_name: str, username: Optional[str]
51+
cls, service_name: str, username: Optional[str]
5552
) -> 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)
5855
if res.returncode:
5956
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)
7364
if res.returncode:
7465
raise RuntimeError(res.stderr)
7566
return None
@@ -79,7 +70,7 @@ def set_password(self, service_name: str, username: str, password: str) -> None:
7970
import keyring
8071
except ImportError:
8172
if shutil.which("keyring") is not None:
82-
keyring = KeyRingCli()
73+
keyring = KeyRingCli # type: ignore[assignment]
8374
keyring = None # type: ignore[assignment]
8475
except Exception as exc:
8576
logger.warning(

0 commit comments

Comments
 (0)