summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmjith Ramanujam <amjith.r@gmail.com>2018-05-16 17:49:31 -0700
committerGitHub <noreply@github.com>2018-05-16 17:49:31 -0700
commit8e12ea5e0fd32dc5ef3b757d555c9ce1fa5123bf (patch)
treebbdea5ecc1092f53c088aadc796c57ff6cef1f9e
parent996a0863b91c688a7761f2684609c5663fb9f4ac (diff)
parent571bb5ca371886e57d63401d83d2c1c745d3990f (diff)
Merge pull request #873 from cfournie/remember_passwords
Remember prompted passwords using keyring
-rw-r--r--.travis.yml1
-rw-r--r--pgcli/main.py10
-rw-r--r--setup.py1
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
diff --git a/setup.py b/setup.py
index 84489924..25849aea 100644
--- a/setup.py
+++ b/setup.py
@@ -21,6 +21,7 @@ install_requirements = [
'configobj >= 5.0.6',
'humanize >= 0.5.1',
'cli_helpers[styles] >= 1.0.1',
+ 'keyring >= 12.2.0'
]