aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/panels/sql.py
diff options
context:
space:
mode:
authorAymeric Augustin2013-11-10 09:58:56 -0800
committerAymeric Augustin2013-11-10 09:58:56 -0800
commitd889bf25d98e6d3c8dde01b207f9ba5f3d91a806 (patch)
tree97967ae5b01c7531954b983606bc78498a128d8a /debug_toolbar/panels/sql.py
parent8c7a8ec6529063853c9ff36da72a38841ca5e235 (diff)
parentf5eaa8ebb0d1ca13aa2453ef88bb1eb223757716 (diff)
downloaddjango-debug-toolbar-d889bf25d98e6d3c8dde01b207f9ba5f3d91a806.tar.bz2
Merge pull request #453 from aaugustin/disable-instrumentation-for-disabled-panels
Disable instrumentation for disabled panels
Diffstat (limited to 'debug_toolbar/panels/sql.py')
-rw-r--r--debug_toolbar/panels/sql.py25
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