From 79b3f51a9de6dfcb7837616f856aa9fbe398910a Mon Sep 17 00:00:00 2001 From: Yannick PEROUX Date: Wed, 15 Jan 2020 14:33:04 +0100 Subject: [PATCH] Lazy Keyring intialization for PasswordManager --- poetry/utils/password_manager.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/poetry/utils/password_manager.py b/poetry/utils/password_manager.py index e992b0562e9..9038d739b10 100644 --- a/poetry/utils/password_manager.py +++ b/poetry/utils/password_manager.py @@ -117,35 +117,40 @@ def _check(self): class PasswordManager: def __init__(self, config): self._config = config - self._keyring = KeyRing("poetry-repository") - if not self._keyring.is_available(): - logger.warning("Using a plaintext file to store and retrieve credentials") + self._keyring = None @property 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 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( "pypi-token.{}".format(name), token ) else: - self._keyring.set_password(name, "__token__", token) + self.keyring.set_password(name, "__token__", token) 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._keyring.get_password(name, "__token__") + return self.keyring.get_password(name, "__token__") 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( "pypi-token.{}".format(name) ) - self._keyring.delete_password(name, "__token__") + self.keyring.delete_password(name, "__token__") def get_http_auth(self, name): auth = self._config.get("http-basic.{}".format(name)) @@ -154,7 +159,7 @@ def get_http_auth(self, name): username, password = auth["username"], auth.get("password") if password is None: - password = self._keyring.get_password(name, username) + password = self.keyring.get_password(name, username) return { "username": username, @@ -164,10 +169,10 @@ def get_http_auth(self, name): def set_http_password(self, name, username, password): auth = {"username": username} - if not self._keyring.is_available(): + if not self.keyring.is_available(): auth["password"] = password 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) @@ -177,7 +182,7 @@ def delete_http_password(self, name): return try: - self._keyring.delete_password(name, auth["username"]) + self.keyring.delete_password(name, auth["username"]) except KeyRingError: pass