diff options
| author | Vladislav Poluhin | 2013-04-24 11:14:34 +0800 |
|---|---|---|
| committer | Vladislav Poluhin | 2013-04-24 11:14:34 +0800 |
| commit | 3d0467d9a4394c4b994a802e6e861ff2562dbb2b (patch) | |
| tree | 0b2aefc7b73ffbbe94e2505bbac01e31d99c2166 /debug_toolbar | |
| parent | e85dfe8ef37d6d99ee482fbd9ac3375ee86253ac (diff) | |
| download | django-debug-toolbar-3d0467d9a4394c4b994a802e6e861ff2562dbb2b.tar.bz2 | |
Got rid of the circular imports
Diffstat (limited to 'debug_toolbar')
| -rw-r--r-- | debug_toolbar/forms.py | 2 | ||||
| -rw-r--r-- | debug_toolbar/panels/sql.py | 30 | ||||
| -rw-r--r-- | debug_toolbar/utils/sql.py | 15 | ||||
| -rw-r--r-- | debug_toolbar/utils/sqlparse/filters.py | 14 | ||||
| -rw-r--r-- | debug_toolbar/views.py | 2 |
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="#">•••</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="#">•••</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: |
