diff options
Diffstat (limited to 'debug_toolbar/panels/sql.py')
| -rw-r--r-- | debug_toolbar/panels/sql.py | 39 |
1 files changed, 10 insertions, 29 deletions
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index a492888..4bfdd27 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -1,14 +1,15 @@ -import re import uuid +from copy import copy from django.db.backends import BaseDatabaseWrapper -from django.utils.html import escape from django.utils.translation import ugettext_lazy as _, ungettext_lazy as __ +from debug_toolbar.forms import SQLSelectForm from debug_toolbar.utils.compat.db import connections from debug_toolbar.middleware import DebugToolbarMiddleware from debug_toolbar.panels import DebugPanel -from debug_toolbar.utils import sqlparse, render_stacktrace +from debug_toolbar.utils import render_stacktrace +from debug_toolbar.utils.sql import reformat_sql from debug_toolbar.utils.tracking.db import CursorWrapper from debug_toolbar.utils.tracking import replace_call @@ -76,9 +77,11 @@ class SQLDebugPanel(DebugPanel): self._transaction_ids = {} def get_transaction_id(self, alias): + if alias not in connections: + return conn = connections[alias].connection if not conn: - return None + return engine = conn.__class__.__module__.split('.', 1)[0] if engine == 'psycopg2': @@ -170,6 +173,9 @@ class SQLDebugPanel(DebugPanel): query['iso_level'] = get_isolation_level_display(query['engine'], query['iso_level']) if 'trans_status' in query: query['trans_status'] = get_transaction_status_display(query['engine'], query['trans_status']) + + query['form'] = SQLSelectForm(auto_id=None, initial=copy(query)) + if query['sql']: query['sql'] = reformat_sql(query['sql']) query['rgb_color'] = self._databases[alias]['rgb_color'] @@ -193,28 +199,3 @@ class SQLDebugPanel(DebugPanel): 'queries': [q for a, q in self._queries], 'sql_time': self._sql_time, }) - - -class BoldKeywordFilter(sqlparse.filters.Filter): - """sqlparse filter to bold SQL keywords""" - def process(self, stack, stream): - """Process the token stream""" - for token_type, value in stream: - is_keyword = token_type in sqlparse.tokens.Keyword - if is_keyword: - yield sqlparse.tokens.Text, '<strong>' - yield token_type, escape(value) - if is_keyword: - yield sqlparse.tokens.Text, '</strong>' - - -def swap_fields(sql): - return re.sub('SELECT</strong> (.*?) <strong>FROM', 'SELECT</strong> <a class="djDebugUncollapsed djDebugToggle" href="#">•••</a> ' + - '<a class="djDebugCollapsed djDebugToggle" href="#">\g<1></a> <strong>FROM', sql) - - -def reformat_sql(sql): - stack = sqlparse.engine.FilterStack() - stack.preprocess.append(BoldKeywordFilter()) # add our custom filter - stack.postprocess.append(sqlparse.filters.SerializerUnicode()) # tokens -> strings - return swap_fields(''.join(stack.run(sql))) |
