From 6c9c3c7e4d53394149c82637f18c0e55d4baca65 Mon Sep 17 00:00:00 2001 From: Brooks Kindle Date: Sat, 23 Apr 2016 11:01:39 -0700 Subject: Prompt for password on upload. The upload command wasn't prompting for a password. If there was no password specified in ~/.pypirc, the upload command, python setup.py sdist upload would fail and raise a TypeError. The workaround for this was to use python setup.py sdist register upload since the register command does prompt for a password. This commit ensures that the upload command prompts for a password if not given one by ~/.pypirc or the register command. --- setuptools/command/upload.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'setuptools/command/upload.py') diff --git a/setuptools/command/upload.py b/setuptools/command/upload.py index 08c20ba8..43c0b0d7 100644 --- a/setuptools/command/upload.py +++ b/setuptools/command/upload.py @@ -3,13 +3,18 @@ from distutils.command import upload as orig class upload(orig.upload): """ - Override default upload behavior to look up password - in the keyring if available. + Override default upload behavior to obtain password + in a variety of different ways. """ def finalize_options(self): orig.upload.finalize_options(self) - self.password or self._load_password_from_keyring() + # Attempt to obtain password. Short circuit evaluation at the first + # sign of success. + self.password = ( + self.password or self._load_password_from_keyring() or + self._prompt_for_password() + ) def _load_password_from_keyring(self): """ @@ -17,7 +22,22 @@ class upload(orig.upload): """ try: keyring = __import__('keyring') - self.password = keyring.get_password(self.repository, - self.username) + password = keyring.get_password(self.repository, self.username) except Exception: - pass + password = None + finally: + return password + + def _prompt_for_password(self): + """ + Prompt for a password on the tty. Suppress Exceptions. + """ + password = None + try: + import getpass + while not password: + password = getpass.getpass() + except (Exception, KeyboardInterrupt): + password = None + finally: + return password -- cgit v1.2.1 From 9b53df4becddd3efe5d8a2f15273ca6ce9fdb843 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 24 Apr 2016 23:19:28 -0500 Subject: Move import to header --- setuptools/command/upload.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'setuptools/command/upload.py') diff --git a/setuptools/command/upload.py b/setuptools/command/upload.py index 43c0b0d7..0e8bbea3 100644 --- a/setuptools/command/upload.py +++ b/setuptools/command/upload.py @@ -1,3 +1,4 @@ +import getpass from distutils.command import upload as orig @@ -34,7 +35,6 @@ class upload(orig.upload): """ password = None try: - import getpass while not password: password = getpass.getpass() except (Exception, KeyboardInterrupt): -- cgit v1.2.1 From a3b119e14df4aff213231492470587f88457a241 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 24 Apr 2016 23:20:51 -0500 Subject: Add carriage return for symmetry --- setuptools/command/upload.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'setuptools/command/upload.py') diff --git a/setuptools/command/upload.py b/setuptools/command/upload.py index 0e8bbea3..a001d461 100644 --- a/setuptools/command/upload.py +++ b/setuptools/command/upload.py @@ -13,7 +13,8 @@ class upload(orig.upload): # Attempt to obtain password. Short circuit evaluation at the first # sign of success. self.password = ( - self.password or self._load_password_from_keyring() or + self.password or + self._load_password_from_keyring() or self._prompt_for_password() ) -- cgit v1.2.1 From c105d6f18a5a17b0a47fda5a2df2f8f47352b037 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 24 Apr 2016 23:25:33 -0500 Subject: Simplify logic by eliminating retries in password prompt and returning results directly. --- setuptools/command/upload.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'setuptools/command/upload.py') diff --git a/setuptools/command/upload.py b/setuptools/command/upload.py index a001d461..484baa5a 100644 --- a/setuptools/command/upload.py +++ b/setuptools/command/upload.py @@ -24,21 +24,15 @@ class upload(orig.upload): """ try: keyring = __import__('keyring') - password = keyring.get_password(self.repository, self.username) + return keyring.get_password(self.repository, self.username) except Exception: - password = None - finally: - return password + pass def _prompt_for_password(self): """ Prompt for a password on the tty. Suppress Exceptions. """ - password = None try: - while not password: - password = getpass.getpass() + return getpass.getpass() except (Exception, KeyboardInterrupt): - password = None - finally: - return password + pass -- cgit v1.2.1