Commit 380e09b9 by Yannick PÉROUX Committed by Sébastien Eustace

Lazy Keyring intialization for PasswordManager (#1892)

parent a0c93572
...@@ -117,35 +117,40 @@ class KeyRing: ...@@ -117,35 +117,40 @@ class KeyRing:
class PasswordManager: class PasswordManager:
def __init__(self, config): def __init__(self, config):
self._config = config self._config = config
self._keyring = KeyRing("poetry-repository") self._keyring = None
if not self._keyring.is_available():
logger.warning("Using a plaintext file to store and retrieve credentials")
@property @property
def keyring(self): def keyring(self):
if self._keyring is None:
self._keyring = KeyRing("poetry-repository")
if not self._keyring.is_available():
logger.warning(
"Using a plaintext file to store and retrieve credentials"
)
return self._keyring return self._keyring
def set_pypi_token(self, name, token): def set_pypi_token(self, name, token):
if not self._keyring.is_available(): if not self.keyring.is_available():
self._config.auth_config_source.add_property( self._config.auth_config_source.add_property(
"pypi-token.{}".format(name), token "pypi-token.{}".format(name), token
) )
else: else:
self._keyring.set_password(name, "__token__", token) self.keyring.set_password(name, "__token__", token)
def get_pypi_token(self, name): def get_pypi_token(self, name):
if not self._keyring.is_available(): if not self.keyring.is_available():
return self._config.get("pypi-token.{}".format(name)) return self._config.get("pypi-token.{}".format(name))
return self._keyring.get_password(name, "__token__") return self.keyring.get_password(name, "__token__")
def delete_pypi_token(self, name): def delete_pypi_token(self, name):
if not self._keyring.is_available(): if not self.keyring.is_available():
return self._config.auth_config_source.remove_property( return self._config.auth_config_source.remove_property(
"pypi-token.{}".format(name) "pypi-token.{}".format(name)
) )
self._keyring.delete_password(name, "__token__") self.keyring.delete_password(name, "__token__")
def get_http_auth(self, name): def get_http_auth(self, name):
auth = self._config.get("http-basic.{}".format(name)) auth = self._config.get("http-basic.{}".format(name))
...@@ -154,7 +159,7 @@ class PasswordManager: ...@@ -154,7 +159,7 @@ class PasswordManager:
username, password = auth["username"], auth.get("password") username, password = auth["username"], auth.get("password")
if password is None: if password is None:
password = self._keyring.get_password(name, username) password = self.keyring.get_password(name, username)
return { return {
"username": username, "username": username,
...@@ -164,10 +169,10 @@ class PasswordManager: ...@@ -164,10 +169,10 @@ class PasswordManager:
def set_http_password(self, name, username, password): def set_http_password(self, name, username, password):
auth = {"username": username} auth = {"username": username}
if not self._keyring.is_available(): if not self.keyring.is_available():
auth["password"] = password auth["password"] = password
else: else:
self._keyring.set_password(name, username, password) self.keyring.set_password(name, username, password)
self._config.auth_config_source.add_property("http-basic.{}".format(name), auth) self._config.auth_config_source.add_property("http-basic.{}".format(name), auth)
...@@ -177,7 +182,7 @@ class PasswordManager: ...@@ -177,7 +182,7 @@ class PasswordManager:
return return
try: try:
self._keyring.delete_password(name, auth["username"]) self.keyring.delete_password(name, auth["username"])
except KeyRingError: except KeyRingError:
pass pass
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment