summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordarikg <darik.gamble@gmail.com>2015-01-09 18:25:56 -0500
committerdarikg <darik.gamble@gmail.com>2015-01-10 20:58:52 -0500
commit50c3ba457e50737dc3c03eace8b4a42d8b32fbef (patch)
tree5c27fa8dd7d426bcea9e74f1386bb1d17748239f
parenta79991dd53fc9a25e063ec8da24592995537dd86 (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.py33
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)