diff options
author | darikg <darik.gamble@gmail.com> | 2015-01-09 18:25:56 -0500 |
---|---|---|
committer | darikg <darik.gamble@gmail.com> | 2015-01-10 20:58:52 -0500 |
commit | 50c3ba457e50737dc3c03eace8b4a42d8b32fbef (patch) | |
tree | 5c27fa8dd7d426bcea9e74f1386bb1d17748239f | |
parent | a79991dd53fc9a25e063ec8da24592995537dd86 (diff) |
let sql-magic handle identifying connections by uri or alias string, and persist pgcli object through multiple cli sessions
-rw-r--r-- | pgcli/magic.py | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/pgcli/magic.py b/pgcli/magic.py index 112a6e9b..c7b558e6 100644 --- a/pgcli/magic.py +++ b/pgcli/magic.py @@ -1,4 +1,9 @@ -from pgcli.main import PGCli +from .main import PGCli +import sql.parse +import sql.connection +import logging + +_logger = logging.getLogger(__name__) def load_ipython_extension(ipython): @@ -9,15 +14,27 @@ def load_ipython_extension(ipython): ipython.run_line_magic('load_ext', 'sql') #register our own magic - ipython.register_magic_function(pgcli_line_magic, 'line','pgcli') + ipython.register_magic_function(pgcli_line_magic, 'line', 'pgcli') def pgcli_line_magic(line): + _logger.debug('pgcli magic called: %r', line) + parsed = sql.parse.parse(line, {}) + conn = sql.connection.Connection.get(parsed['connection']) - #for now, assume line is connection string e.g. postgres://localhost - uri = line - - pgcli = PGCli() - pgcli.connect_uri(uri) + try: + #A corresponding pgcli object already exists + pgcli = conn._pgcli + _logger.debug('Reusing existing pgcli') + except AttributeError: + #I can't figure out how to get the underylying psycopg2 connection + #from the sqlalchemy connection, so just grab the url and make a + #new connection + pgcli = PGCli() + u = conn.session.engine.url + _logger.debug('New pgcli: %r', str(u)) + + pgcli.connect(u.database, u.host, u.username, u.port, u.password) + conn._pgcli = pgcli try: pgcli.run_cli() @@ -30,5 +47,5 @@ def pgcli_line_magic(line): q = pgcli.query_history[-1] if q.successful: ipython = get_ipython() - return ipython.run_cell_magic('sql', uri, q.query) + return ipython.run_cell_magic('sql', line, q.query) |