diff options
Diffstat (limited to 'debug_toolbar/panels/sql.py')
| -rw-r--r-- | debug_toolbar/panels/sql.py | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index 1ced049..53b9f53 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -4,28 +4,13 @@ import uuid from copy import copy from django.db import connections -from django.db.backends import BaseDatabaseWrapper from django.utils.translation import ugettext_lazy as _, ungettext_lazy as __ from debug_toolbar.forms import SQLSelectForm -from debug_toolbar.middleware import DebugToolbarMiddleware from debug_toolbar.panels import DebugPanel 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_method - - -@replace_method(BaseDatabaseWrapper, 'cursor') -def cursor(original, self): - result = original(self) - - djdt = DebugToolbarMiddleware.get_current() - if not djdt: - return result - logger = djdt.get_panel(SQLDebugPanel) - - return CursorWrapper(result, self, logger=logger) def get_isolation_level_display(engine, level): @@ -131,6 +116,16 @@ class SQLDebugPanel(DebugPanel): 'SQL Queries from %(count)d connections', count) % dict(count=count) + def enable_instrumentation(self): + # This is thread-safe because database connections are thread-local. + for connection in connections.all(): + old_cursor = connection.cursor + connection.cursor = lambda: CursorWrapper(old_cursor(), connection, self) + + def disable_instrumentation(self): + for connection in connections.all(): + del connection.cursor + def process_response(self, request, response): if self._queries: width_ratio_tally = 0 |
