diff options
author | Amjith Ramanujam <amjith.r@gmail.com> | 2018-05-16 17:49:31 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-16 17:49:31 -0700 |
commit | 8e12ea5e0fd32dc5ef3b757d555c9ce1fa5123bf (patch) | |
tree | bbdea5ecc1092f53c088aadc796c57ff6cef1f9e | |
parent | 996a0863b91c688a7761f2684609c5663fb9f4ac (diff) | |
parent | 571bb5ca371886e57d63401d83d2c1c745d3990f (diff) |
Merge pull request #873 from cfournie/remember_passwords
Remember prompted passwords using keyring
-rw-r--r-- | .travis.yml | 1 | ||||
-rw-r--r-- | pgcli/main.py | 10 | ||||
-rw-r--r-- | setup.py | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/.travis.yml b/.travis.yml index 6093e745..f54e1a8e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ python: install: - pip install . - pip install -r requirements-dev.txt + - pip install keyrings.alt>=3.1 script: - set -e diff --git a/pgcli/main.py b/pgcli/main.py index ad36404c..dd125199 100644 --- a/pgcli/main.py +++ b/pgcli/main.py @@ -40,6 +40,7 @@ from pygments.token import Token from pgspecial.main import (PGSpecial, NO_QUERY, PAGER_OFF) import pgspecial as special +import keyring from .pgcompleter import PGCompleter from .pgtoolbar import create_toolbar_tokens_func from .pgstyle import style_factory, style_factory_output @@ -396,6 +397,11 @@ class PGCli(object): if not self.force_passwd_prompt and not passwd: passwd = os.environ.get('PGPASSWORD', '') + # Find password from store + key = '%s@%s' % (user, host) + if not passwd: + passwd = keyring.get_password('pgcli', key) + # Prompt for a password immediately if requested via the -W flag. This # avoids wasting time trying to connect to the database and catching a # no-password exception. @@ -417,6 +423,8 @@ class PGCli(object): try: pgexecute = PGExecute(database, user, passwd, host, port, dsn, application_name='pgcli', **kwargs) + if passwd: + keyring.set_password('pgcli', key, passwd) except (OperationalError, InterfaceError) as e: if ('no password supplied' in utf8tounicode(e.args[0]) and auto_passwd_prompt): @@ -426,6 +434,8 @@ class PGCli(object): pgexecute = PGExecute(database, user, passwd, host, port, dsn, application_name='pgcli', **kwargs) + if passwd: + keyring.set_password('pgcli', key, passwd) else: raise e @@ -21,6 +21,7 @@ install_requirements = [ 'configobj >= 5.0.6', 'humanize >= 0.5.1', 'cli_helpers[styles] >= 1.0.1', + 'keyring >= 12.2.0' ] |