aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--debug_toolbar/forms.py2
-rw-r--r--debug_toolbar/panels/sql.py30
-rw-r--r--debug_toolbar/utils/sql.py15
-rw-r--r--debug_toolbar/utils/sqlparse/filters.py14
-rw-r--r--debug_toolbar/views.py2
5 files changed, 32 insertions, 31 deletions
diff --git a/debug_toolbar/forms.py b/debug_toolbar/forms.py
index d795c17..5955bfc 100644
--- a/debug_toolbar/forms.py
+++ b/debug_toolbar/forms.py
@@ -2,6 +2,7 @@ from django import forms
from django.conf import settings
from django.core.exceptions import ValidationError
from django.utils.functional import cached_property
+from debug_toolbar.utils.sql import reformat_sql
try:
import json
@@ -75,7 +76,6 @@ class SQLSelectForm(forms.Form):
return hash
def reformat_sql(self):
- from debug_toolbar.panels.sql import reformat_sql
sql, params = self.cleaned_data['sql'], self.cleaned_data['params']
return reformat_sql(self.cursor.db.ops.last_executed_query(self.cursor, sql, params))
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py
index e434014..74729c7 100644
--- a/debug_toolbar/panels/sql.py
+++ b/debug_toolbar/panels/sql.py
@@ -1,16 +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
@@ -198,28 +197,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="#">&bull;&bull;&bull;</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)))
diff --git a/debug_toolbar/utils/sql.py b/debug_toolbar/utils/sql.py
new file mode 100644
index 0000000..909edf7
--- /dev/null
+++ b/debug_toolbar/utils/sql.py
@@ -0,0 +1,15 @@
+import re
+from debug_toolbar.utils import sqlparse
+from debug_toolbar.utils.sqlparse.filters import BoldKeywordFilter
+
+
+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)))
+
+
+def swap_fields(sql):
+ return re.sub('SELECT</strong> (.*?) <strong>FROM', 'SELECT</strong> <a class="djDebugUncollapsed djDebugToggle" href="#">&bull;&bull;&bull;</a> ' +
+ '<a class="djDebugCollapsed djDebugToggle" href="#">\g<1></a> <strong>FROM', sql)
diff --git a/debug_toolbar/utils/sqlparse/filters.py b/debug_toolbar/utils/sqlparse/filters.py
index 897cc90..6443a3c 100644
--- a/debug_toolbar/utils/sqlparse/filters.py
+++ b/debug_toolbar/utils/sqlparse/filters.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import re
+from django.utils.html import escape
from debug_toolbar.utils.sqlparse import tokens as T
from debug_toolbar.utils.sqlparse import sql
@@ -423,3 +424,16 @@ class OutputPHPFilter(Filter):
varname = self.varname
stmt.tokens = tuple(self._process(stmt.tokens, varname))
return stmt
+
+
+class BoldKeywordFilter(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 T.Keyword
+ if is_keyword:
+ yield T.Text, '<strong>'
+ yield token_type, escape(value)
+ if is_keyword:
+ yield T.Text, '</strong>'
diff --git a/debug_toolbar/views.py b/debug_toolbar/views.py
index 22b03d9..13a36b1 100644
--- a/debug_toolbar/views.py
+++ b/debug_toolbar/views.py
@@ -6,10 +6,8 @@ views in any other way is generally not advised.
from django.http import HttpResponseBadRequest
from django.shortcuts import render_to_response
-from django.utils import simplejson
from django.views.decorators.csrf import csrf_exempt
-
try:
from hashlib import sha1
except ImportError: