diff options
author | Karl-Aksel Puulmann <oxymaccy@gmail.com> | 2015-01-09 11:56:22 +0200 |
---|---|---|
committer | Karl-Aksel Puulmann <oxymaccy@gmail.com> | 2015-01-09 19:47:43 +0200 |
commit | 33436b0cf612df3f4de0ea07a43814adc04ee8e9 (patch) | |
tree | 6a7c6f96eecae640b2cac90254a7cdc83eef8113 | |
parent | 63fb6b1bd1068960ab2536bb027f0858d4d68d06 (diff) |
Support for cancelling queries
-rwxr-xr-x | pgcli/main.py | 4 | ||||
-rw-r--r-- | pgcli/pgexecute.py | 7 |
2 files changed, 11 insertions, 0 deletions
diff --git a/pgcli/main.py b/pgcli/main.py index 891ea5a4..87b8bda8 100755 --- a/pgcli/main.py +++ b/pgcli/main.py @@ -156,6 +156,10 @@ def cli(database, user, host, port, prompt_passwd, never_prompt): _logger.debug("status: %r", status) output.extend(format_output(rows, headers, status)) click.echo_via_pager('\n'.join(output)) + except KeyboardInterrupt: + pgexecute.reconnect() + _logger.debug("cancelled query, sql: %r", document.text) + click.secho("cancelled query", err=True, fg='red') except Exception as e: _logger.error("sql: %r, error: %r", document.text, e) _logger.error("traceback: %r", traceback.format_exc()) diff --git a/pgcli/pgexecute.py b/pgcli/pgexecute.py index 0c9d45b5..e4b31d51 100644 --- a/pgcli/pgexecute.py +++ b/pgcli/pgexecute.py @@ -1,5 +1,6 @@ import logging import psycopg2 +import psycopg2.extras import psycopg2.extensions from collections import defaultdict from .packages import pgspecial @@ -11,6 +12,9 @@ _logger = logging.getLogger(__name__) psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY) +# When running a query, make pressing CTRL+C raise a KeyboardInterrupt +psycopg2.extensions.set_wait_callback(psycopg2.extras.wait_select) + def _parse_dsn(dsn, default_user, default_password, default_host, default_port): """ @@ -70,6 +74,9 @@ class PGExecute(object): _parse_dsn(database, default_user=user, default_password=password, default_host=host, default_port=port) + self.reconnect() + + def reconnect(self): self.conn = psycopg2.connect(database=self.dbname, user=self.user, password=self.password, host=self.host, port=self.port) self.conn.autocommit = True |