Index: third_party/google-endpoints/setuptools/command/upload.py |
diff --git a/third_party/google-endpoints/setuptools/command/upload.py b/third_party/google-endpoints/setuptools/command/upload.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..484baa5a538a3b4828ddff54bb4a2f362999675c |
--- /dev/null |
+++ b/third_party/google-endpoints/setuptools/command/upload.py |
@@ -0,0 +1,38 @@ |
+import getpass |
+from distutils.command import upload as orig |
+ |
+ |
+class upload(orig.upload): |
+ """ |
+ Override default upload behavior to obtain password |
+ in a variety of different ways. |
+ """ |
+ |
+ def finalize_options(self): |
+ orig.upload.finalize_options(self) |
+ # 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): |
+ """ |
+ Attempt to load password from keyring. Suppress Exceptions. |
+ """ |
+ try: |
+ keyring = __import__('keyring') |
+ return keyring.get_password(self.repository, self.username) |
+ except Exception: |
+ pass |
+ |
+ def _prompt_for_password(self): |
+ """ |
+ Prompt for a password on the tty. Suppress Exceptions. |
+ """ |
+ try: |
+ return getpass.getpass() |
+ except (Exception, KeyboardInterrupt): |
+ pass |