aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/utils
diff options
context:
space:
mode:
authorVladislav Poluhin2013-04-24 11:14:34 +0800
committerVladislav Poluhin2013-04-24 11:14:34 +0800
commit3d0467d9a4394c4b994a802e6e861ff2562dbb2b (patch)
tree0b2aefc7b73ffbbe94e2505bbac01e31d99c2166 /debug_toolbar/utils
parente85dfe8ef37d6d99ee482fbd9ac3375ee86253ac (diff)
downloaddjango-debug-toolbar-3d0467d9a4394c4b994a802e6e861ff2562dbb2b.tar.bz2
Got rid of the circular imports
Diffstat (limited to 'debug_toolbar/utils')
-rw-r--r--debug_toolbar/utils/sql.py15
-rw-r--r--debug_toolbar/utils/sqlparse/filters.py14
2 files changed, 29 insertions, 0 deletions
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>'