summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Koljonen <koljonen@Joakims-MacBook-Pro-2.local>2016-07-21 11:50:21 +0200
committerJoakim Koljonen <koljonen@Joakims-MacBook-Pro-2.local>2016-07-29 13:54:16 +0200
commit9fa429fc1bc3a14a9051ca133bbeb4edf8a7ea07 (patch)
tree8338c2a35b56cbdfc9bc571753064ce087ce3862
parent6894c8ecaac64f4b5baaa383ea689e658782d05e (diff)
Add command-line option --single-connection
This option makes it so that the executor and the completer use the same database connection. This is needed for the completer to function when using one-time passwords for connecting to the database.
-rw-r--r--pgcli/completion_refresher.py11
-rwxr-xr-xpgcli/main.py15
2 files changed, 18 insertions, 8 deletions
diff --git a/pgcli/completion_refresher.py b/pgcli/completion_refresher.py
index b4a89d91..e1e05e5a 100644
--- a/pgcli/completion_refresher.py
+++ b/pgcli/completion_refresher.py
@@ -49,12 +49,17 @@ class CompletionRefresher(object):
def _bg_refresh(self, pgexecute, special, callbacks, history=None,
settings=None):
+ settings = settings or {}
completer = PGCompleter(smart_completion=True, pgspecial=special,
settings=settings)
- # Create a new pgexecute method to popoulate the completions.
- e = pgexecute
- executor = PGExecute(e.dbname, e.user, e.password, e.host, e.port, e.dsn)
+ if settings.get('single_connection'):
+ executor = pgexecute
+ else:
+ # Create a new pgexecute method to popoulate the completions.
+ e = pgexecute
+ executor = PGExecute(
+ e.dbname, e.user, e.password, e.host, e.port, e.dsn)
# If callbacks is a single function then push it into a list.
if callable(callbacks):
diff --git a/pgcli/main.py b/pgcli/main.py
index 81418194..0f81c9d3 100755
--- a/pgcli/main.py
+++ b/pgcli/main.py
@@ -101,7 +101,8 @@ class PGCli(object):
os.environ['LESS'] = '-SRXF'
def __init__(self, force_passwd_prompt=False, never_passwd_prompt=False,
- pgexecute=None, pgclirc_file=None, row_limit=None):
+ pgexecute=None, pgclirc_file=None, row_limit=None,
+ single_connection=False):
self.force_passwd_prompt = force_passwd_prompt
self.never_passwd_prompt = never_passwd_prompt
@@ -142,7 +143,8 @@ class PGCli(object):
self.settings = {'casing_file': get_casing_file(c),
'generate_casing_file': c['main'].as_bool('generate_casing_file'),
'generate_aliases': c['main'].as_bool('generate_aliases'),
- 'asterisk_column_order': c['main']['asterisk_column_order']}
+ 'asterisk_column_order': c['main']['asterisk_column_order'],
+ 'single_connection': single_connection}
completer = PGCompleter(smart_completion, pgspecial=self.pgspecial,
settings=self.settings)
self.completer = completer
@@ -670,6 +672,9 @@ class PGCli(object):
help='Force password prompt.')
@click.option('-w', '--no-password', 'never_prompt', is_flag=True,
default=False, help='Never prompt for password.')
+@click.option('--single-connection', 'single_connection', is_flag=True,
+ default=False,
+ help='Don''t use a separate connection for completions.')
@click.option('-v', '--version', is_flag=True, help='Version of pgcli.')
@click.option('-d', '--dbname', default='', envvar='PGDATABASE',
help='database name to connect to.')
@@ -681,8 +686,8 @@ class PGCli(object):
help='Set threshold for row limit prompt. Use 0 to disable prompt.')
@click.argument('database', default=lambda: None, envvar='PGDATABASE', nargs=1)
@click.argument('username', default=lambda: None, envvar='PGUSER', nargs=1)
-def cli(database, user, host, port, prompt_passwd, never_prompt, dbname,
- username, version, pgclirc, dsn, row_limit):
+def cli(database, user, host, port, prompt_passwd, never_prompt,
+ single_connection, dbname, username, version, pgclirc, dsn, row_limit):
if version:
print('Version:', __version__)
@@ -705,7 +710,7 @@ def cli(database, user, host, port, prompt_passwd, never_prompt, dbname,
config_full_path)
pgcli = PGCli(prompt_passwd, never_prompt, pgclirc_file=pgclirc,
- row_limit=row_limit)
+ row_limit=row_limit, single_connection=single_connection)
# Choose which ever one has a valid value.
database = database or dbname