aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbkonkle2011-09-15 10:36:11 -0500
committerbkonkle2011-09-15 10:36:11 -0500
commit717dc6815a9d4ddcd30efc17db11ade0f8f38354 (patch)
tree5f3a3fceefe9bead41019c3216991337cc12fe6f
parented9bca7c00f6f326842d79e843f678787fac8b15 (diff)
downloaddjango-debug-toolbar-717dc6815a9d4ddcd30efc17db11ade0f8f38354.tar.bz2
Edited all of the panels to use the stats API and not override the content method
-rw-r--r--debug_toolbar/panels/cache.py14
-rw-r--r--debug_toolbar/panels/headers.py14
-rw-r--r--debug_toolbar/panels/logger.py15
-rw-r--r--debug_toolbar/panels/profiling.py27
-rw-r--r--debug_toolbar/panels/request_vars.py19
-rw-r--r--debug_toolbar/panels/settings_vars.py14
-rw-r--r--debug_toolbar/panels/signals.py12
-rw-r--r--debug_toolbar/panels/sql.py20
-rw-r--r--debug_toolbar/panels/template.py17
-rw-r--r--debug_toolbar/panels/timer.py43
-rw-r--r--debug_toolbar/panels/version.py15
11 files changed, 67 insertions, 143 deletions
diff --git a/debug_toolbar/panels/cache.py b/debug_toolbar/panels/cache.py
index ad3f844..c9dae6d 100644
--- a/debug_toolbar/panels/cache.py
+++ b/debug_toolbar/panels/cache.py
@@ -3,9 +3,7 @@ import inspect
from django.core import cache
from django.core.cache.backends.base import BaseCache
-from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
-from debug_toolbar.middleware import DebugToolbarMiddleware
from debug_toolbar.panels import DebugPanel
class CacheStatTracker(BaseCache):
@@ -75,6 +73,7 @@ class CacheDebugPanel(DebugPanel):
Panel that displays the cache statistics.
"""
name = 'Cache'
+ template = 'debug_toolbar/panels/cache.html'
has_content = True
def __init__(self, *args, **kwargs):
@@ -97,15 +96,8 @@ class CacheDebugPanel(DebugPanel):
return ''
def process_response(self, request, response):
- self.stats = {
+ self.record_stats({
'cache_calls': len(self.cache.calls),
'cache_time': self.cache.total_time,
'cache': self.cache,
- }
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['cache'] = self.stats
-
- def content(self):
- context = self.context.copy()
- context.update(self.stats)
- return render_to_string('debug_toolbar/panels/cache.html', context)
+ })
diff --git a/debug_toolbar/panels/headers.py b/debug_toolbar/panels/headers.py
index a88fbd9..181e88d 100644
--- a/debug_toolbar/panels/headers.py
+++ b/debug_toolbar/panels/headers.py
@@ -1,7 +1,5 @@
-from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
from debug_toolbar.panels import DebugPanel
-from debug_toolbar.middleware import DebugToolbarMiddleware
class HeaderDebugPanel(DebugPanel):
@@ -9,6 +7,7 @@ class HeaderDebugPanel(DebugPanel):
A panel to display HTTP headers.
"""
name = 'Header'
+ template = 'debug_toolbar/panels/headers.html'
has_content = True
# List of headers we want to display
header_filter = (
@@ -49,13 +48,6 @@ class HeaderDebugPanel(DebugPanel):
)
def process_response(self, request, response):
- self.stats = {
+ self.record_stats({
'headers': self.headers
- }
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['headers'] = self.stats
-
- def content(self):
- context = self.context.copy()
- context.update(self.stats)
- return render_to_string('debug_toolbar/panels/headers.html', context)
+ })
diff --git a/debug_toolbar/panels/logger.py b/debug_toolbar/panels/logger.py
index ba34700..55ae9bd 100644
--- a/debug_toolbar/panels/logger.py
+++ b/debug_toolbar/panels/logger.py
@@ -4,10 +4,8 @@ try:
import threading
except ImportError:
threading = None
-from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
from debug_toolbar.panels import DebugPanel
-from debug_toolbar.middleware import DebugToolbarMiddleware
class LogCollector(object):
@@ -88,13 +86,14 @@ if logbook_supported:
'channel': record.channel,
}
self.collector.add_record(record)
-
+
logbook_handler = LogbookThreadTrackingHandler(collector)
logbook_handler.push_application() # register with logbook
class LoggingPanel(DebugPanel):
name = 'Logging'
+ template = 'debug_toolbar/panels/logger.html'
has_content = True
def process_request(self, request):
@@ -102,9 +101,7 @@ class LoggingPanel(DebugPanel):
def process_response(self, request, response):
records = self.get_and_delete()
- self.stats = {'records': records}
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['logger'] = self.stats
+ self.record_stats({'records': records})
def get_and_delete(self):
records = collector.get_records()
@@ -123,9 +120,3 @@ class LoggingPanel(DebugPanel):
def url(self):
return ''
-
- def content(self):
- context = self.context.copy()
- context.update(self.stats)
- return render_to_string('debug_toolbar/panels/logger.html', context)
-
diff --git a/debug_toolbar/panels/profiling.py b/debug_toolbar/panels/profiling.py
index e08591a..8913621 100644
--- a/debug_toolbar/panels/profiling.py
+++ b/debug_toolbar/panels/profiling.py
@@ -1,9 +1,7 @@
from __future__ import division
-from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
from django.utils.safestring import mark_safe
-from debug_toolbar.middleware import DebugToolbarMiddleware
from debug_toolbar.panels import DebugPanel
try:
@@ -143,6 +141,7 @@ class ProfilingDebugPanel(DebugPanel):
Panel that displays the Django version.
"""
name = 'Profiling'
+ template = 'debug_toolbar/panels/profiling.html'
has_content = True
def nav_title(self):
@@ -178,16 +177,6 @@ class ProfilingDebugPanel(DebugPanel):
out = self.profiler.runcall(view_func, *args, **view_kwargs)
return out
- def process_response(self, request, response):
- self.profiler.create_stats()
- self.stats = DjangoDebugToolbarStats(self.profiler)
- if DJ_PROFILE_USE_LINE_PROFILER:
- self.stats.line_stats = self.line_profiler.get_stats()
- self.stats.calc_callees()
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['profiling'] = self.stats
- return response
-
def add_node(self, func_list, func, max_depth, cum_time=0.1):
func_list.append(func)
func.has_subfuncs = False
@@ -199,14 +188,16 @@ class ProfilingDebugPanel(DebugPanel):
func.has_subfuncs = True
self.add_node(func_list, subfunc, max_depth, cum_time=cum_time)
- def content(self):
+ def process_response(self, request, response):
+ self.profiler.create_stats()
+ self.stats = DjangoDebugToolbarStats(self.profiler)
+ if DJ_PROFILE_USE_LINE_PROFILER:
+ self.stats.line_stats = self.line_profiler.get_stats()
+ self.stats.calc_callees()
+
root = FunctionCall(self.stats, self.stats.get_root_func(), depth=0)
func_list = []
self.add_node(func_list, root, 10, root.stats[3]/8)
- context = self.context.copy()
- context.update({
- 'func_list': func_list,
- })
- return render_to_string('debug_toolbar/panels/profiling.html', context)
+ self.stats_record({'func_list': func_list})
diff --git a/debug_toolbar/panels/request_vars.py b/debug_toolbar/panels/request_vars.py
index 80cd018..ee9cdc5 100644
--- a/debug_toolbar/panels/request_vars.py
+++ b/debug_toolbar/panels/request_vars.py
@@ -1,7 +1,5 @@
-from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
-from debug_toolbar.middleware import DebugToolbarMiddleware
from debug_toolbar.panels import DebugPanel
from debug_toolbar.utils import get_name_from_obj
@@ -10,6 +8,7 @@ class RequestVarsDebugPanel(DebugPanel):
A panel to display request variables (POST/GET, session, cookies).
"""
name = 'RequestVars'
+ template = 'debug_toolbar/panels/request_vars.html'
has_content = True
def __init__(self, *args, **kwargs):
@@ -36,11 +35,11 @@ class RequestVarsDebugPanel(DebugPanel):
self.view_kwargs = view_kwargs
def process_response(self, request, response):
- self.stats = {
+ self.record_stats({
'get': [(k, self.request.GET.getlist(k)) for k in self.request.GET],
'post': [(k, self.request.POST.getlist(k)) for k in self.request.POST],
'cookies': [(k, self.request.COOKIES.get(k)) for k in self.request.COOKIES],
- }
+ })
if hasattr(self, 'view_func'):
if self.view_func is not None:
@@ -48,21 +47,13 @@ class RequestVarsDebugPanel(DebugPanel):
else:
name = '<no view>'
- self.stats.update({
+ self.record_stats({
'view_func': name,
'view_args': self.view_args,
'view_kwargs': self.view_kwargs
})
if hasattr(self.request, 'session'):
- self.stats.update({
+ self.record_stats({
'session': [(k, self.request.session.get(k)) for k in self.request.session.iterkeys()]
})
-
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['request_vars'] = self.stats
-
- def content(self):
- context = self.context.copy()
- context.update(self.stats)
- return render_to_string('debug_toolbar/panels/request_vars.html', context)
diff --git a/debug_toolbar/panels/settings_vars.py b/debug_toolbar/panels/settings_vars.py
index 029496e..e154dda 100644
--- a/debug_toolbar/panels/settings_vars.py
+++ b/debug_toolbar/panels/settings_vars.py
@@ -1,8 +1,6 @@
from django.conf import settings
-from django.template.loader import render_to_string
from django.views.debug import get_safe_settings
from django.utils.translation import ugettext_lazy as _
-from debug_toolbar.middleware import DebugToolbarMiddleware
from debug_toolbar.panels import DebugPanel
@@ -11,6 +9,7 @@ class SettingsVarsDebugPanel(DebugPanel):
A panel to display all variables in django.conf.settings
"""
name = 'SettingsVars'
+ template = 'debug_toolbar/panels/settings_vars.html'
has_content = True
def nav_title(self):
@@ -23,13 +22,6 @@ class SettingsVarsDebugPanel(DebugPanel):
return ''
def process_response(self, request, response):
- self.stats = {
+ self.record_stats({
'settings': get_safe_settings(),
- }
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['settings_vars'] = self.stats
-
- def content(self):
- context = self.context.copy()
- context.update(self.stats)
- return render_to_string('debug_toolbar/panels/settings_vars.html', context)
+ })
diff --git a/debug_toolbar/panels/signals.py b/debug_toolbar/panels/signals.py
index 9855299..205b3c5 100644
--- a/debug_toolbar/panels/signals.py
+++ b/debug_toolbar/panels/signals.py
@@ -6,7 +6,6 @@ from django.core.signals import request_started, request_finished, \
from django.db.models.signals import class_prepared, pre_init, post_init, \
pre_save, post_save, pre_delete, post_delete, post_syncdb
from django.dispatch.dispatcher import WEAKREF_TYPES
-from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
try:
@@ -14,11 +13,11 @@ try:
except ImportError:
connection_created = None
-from debug_toolbar.middleware import DebugToolbarMiddleware
from debug_toolbar.panels import DebugPanel
class SignalDebugPanel(DebugPanel):
name = "Signals"
+ template = 'debug_toolbar/panels/signals.html'
has_content = True
SIGNALS = {
@@ -82,11 +81,4 @@ class SignalDebugPanel(DebugPanel):
receivers.append(text)
signals.append((name, signal, receivers))
- self.stats = {'signals': signals}
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['signals'] = self.stats
-
- def content(self):
- context = self.context.copy()
- context.update(self.stats)
- return render_to_string('debug_toolbar/panels/signals.html', context)
+ self.record_stats({'signals': signals})
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py
index 9527410..188e1eb 100644
--- a/debug_toolbar/panels/sql.py
+++ b/debug_toolbar/panels/sql.py
@@ -2,7 +2,6 @@ import re
import uuid
from django.db.backends import BaseDatabaseWrapper
-from django.template.loader import render_to_string
from django.utils.html import escape
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _, ungettext_lazy as __
@@ -14,6 +13,7 @@ from debug_toolbar.utils import sqlparse
from debug_toolbar.utils.tracking.db import CursorWrapper
from debug_toolbar.utils.tracking import replace_call
+
# Inject our tracking cursor
@replace_call(BaseDatabaseWrapper.cursor)
def cursor(func, self):
@@ -26,6 +26,7 @@ def cursor(func, self):
return CursorWrapper(result, self, logger=logger)
+
def get_isolation_level_display(engine, level):
if engine == 'psycopg2':
import psycopg2.extensions
@@ -41,6 +42,7 @@ def get_isolation_level_display(engine, level):
return choices.get(level)
+
def get_transaction_status_display(engine, level):
if engine == 'psycopg2':
import psycopg2.extensions
@@ -56,12 +58,14 @@ def get_transaction_status_display(engine, level):
return choices.get(level)
+
class SQLDebugPanel(DebugPanel):
"""
Panel that displays information about the SQL queries run while processing
the request.
"""
name = 'SQL'
+ template = 'debug_toolbar/panels/sql.html'
has_content = True
def __init__(self, *args, **kwargs):
@@ -205,18 +209,12 @@ class SQLDebugPanel(DebugPanel):
if trans_id:
self._queries[i-1][1]['ends_trans'] = True
- self.stats = {
+ self.record_stats({
'databases': sorted(self._databases.items(), key=lambda x: -x[1]['time_spent']),
'queries': [q for a, q in self._queries],
'sql_time': self._sql_time,
- }
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['sql'] = self.stats
-
- def content(self):
- context = self.context.copy()
- context.update(self.stats)
- return render_to_string('debug_toolbar/panels/sql.html', context)
+ })
+
class BoldKeywordFilter(sqlparse.filters.Filter):
"""sqlparse filter to bold SQL keywords"""
@@ -230,10 +228,12 @@ class BoldKeywordFilter(sqlparse.filters.Filter):
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
diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py
index d0ab6cc..41e0afc 100644
--- a/debug_toolbar/panels/template.py
+++ b/debug_toolbar/panels/template.py
@@ -4,10 +4,8 @@ from pprint import pformat
from django import http
from django.conf import settings
from django.template.context import get_standard_processors
-from django.template.loader import render_to_string
from django.test.signals import template_rendered
from django.utils.translation import ugettext_lazy as _
-from debug_toolbar.middleware import DebugToolbarMiddleware
from debug_toolbar.panels import DebugPanel
# Code taken and adapted from Simon Willison and Django Snippets:
@@ -28,6 +26,7 @@ else:
Template.original_render = Template._render
Template._render = instrumented_test_render
+
# MONSTER monkey-patch
old_template_init = Template.__init__
def new_template_init(self, template_string, origin=None, name='<Unknown Template>'):
@@ -35,11 +34,13 @@ def new_template_init(self, template_string, origin=None, name='<Unknown Templat
self.origin = origin
Template.__init__ = new_template_init
+
class TemplateDebugPanel(DebugPanel):
"""
A panel that lists all templates used during processing of a response.
"""
name = 'Template'
+ template = 'debug_toolbar/panels/templates.html'
has_content = True
def __init__(self, *args, **kwargs):
@@ -118,16 +119,8 @@ class TemplateDebugPanel(DebugPanel):
info['context'] = '\n'.join(context_list)
template_context.append(info)
- self.stats = {
+ self.record_stats({
'templates': template_context,
'template_dirs': [normpath(x) for x in settings.TEMPLATE_DIRS],
'context_processors': context_processors,
- }
-
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['template'] = self.stats
-
- def content(self):
- context = self.context.copy()
- context.update(self.stats)
- return render_to_string('debug_toolbar/panels/templates.html', context)
+ })
diff --git a/debug_toolbar/panels/timer.py b/debug_toolbar/panels/timer.py
index 466e5c0..7c0febf 100644
--- a/debug_toolbar/panels/timer.py
+++ b/debug_toolbar/panels/timer.py
@@ -5,14 +5,15 @@ except ImportError:
import time
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
-from debug_toolbar.middleware import DebugToolbarMiddleware
from debug_toolbar.panels import DebugPanel
+
class TimerDebugPanel(DebugPanel):
"""
Panel that displays the time a response took in milliseconds.
"""
name = 'Timer'
+ template = 'debug_toolbar/panels/timer.html'
try: # if resource module not available, don't show content panel
resource
except NameError:
@@ -50,7 +51,7 @@ class TimerDebugPanel(DebugPanel):
# urss = self._end_rusage.ru_idrss
# usrss = self._end_rusage.ru_isrss
- self.stats = {
+ self.record_stats({
'total_time': total_time,
'utime': utime,
'stime': stime,
@@ -65,22 +66,21 @@ class TimerDebugPanel(DebugPanel):
# 'urss': urss,
# 'srss': srss,
# 'usrss': usrss,
- }
-
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['timer'] = self.stats
+ })
def nav_title(self):
return _('Time')
def nav_subtitle(self):
+ stats = self.get_stats()
+
# TODO l10n
if self.has_resource:
utime = self._end_rusage.ru_utime - self._start_rusage.ru_utime
stime = self._end_rusage.ru_stime - self._start_rusage.ru_stime
- return 'CPU: %0.2fms (%0.2fms)' % ((utime + stime) * 1000.0, self.stats['total_time'])
+ return 'CPU: %0.2fms (%0.2fms)' % ((utime + stime) * 1000.0, stats['total_time'])
else:
- return 'TOTAL: %0.2fms' % (self.stats[total_time])
+ return 'TOTAL: %0.2fms' % (stats['total_time'])
def title(self):
return _('Resource Usage')
@@ -92,22 +92,21 @@ class TimerDebugPanel(DebugPanel):
return getattr(self._end_rusage, name) - getattr(self._start_rusage, name)
def content(self):
+ stats = self.get_stats()
+
# TODO l10n on values
rows = (
- (_('User CPU time'), '%0.3f msec' % self.stats['utime']),
- (_('System CPU time'), '%0.3f msec' % self.stats['stime']),
- (_('Total CPU time'), '%0.3f msec' % (self.stats['utime'] + self.stats['stime'])),
- (_('Elapsed time'), '%0.3f msec' % self.stats['total_time']),
- (_('Context switches'), '%d voluntary, %d involuntary' % (self.stats['vcsw'], self.stats['ivcsw'])),
-# ('Memory use', '%d max RSS, %d shared, %d unshared' % (self.stats['rss'], self.stats.['srss'],
-# self.stats['urss'] + self.stats['usrss'])),
-# ('Page faults', '%d no i/o, %d requiring i/o' % (self.stats['minflt'], self.stats['majflt'])),
-# ('Disk operations', '%d in, %d out, %d swapout' % (self.stats['blkin'], self.stats['blkout'], self.stats['swap'])),
+ (_('User CPU time'), '%0.3f msec' % stats['utime']),
+ (_('System CPU time'), '%0.3f msec' % stats['stime']),
+ (_('Total CPU time'), '%0.3f msec' % (stats['utime'] + stats['stime'])),
+ (_('Elapsed time'), '%0.3f msec' % stats['total_time']),
+ (_('Context switches'), '%d voluntary, %d involuntary' % (stats['vcsw'], stats['ivcsw'])),
+# ('Memory use', '%d max RSS, %d shared, %d unshared' % (stats['rss'], stats.['srss'],
+# stats['urss'] + stats['usrss'])),
+# ('Page faults', '%d no i/o, %d requiring i/o' % (stats['minflt'], stats['majflt'])),
+# ('Disk operations', '%d in, %d out, %d swapout' % (stats['blkin'], stats['blkout'], stats['swap'])),
)
context = self.context.copy()
- context.update({
- 'rows': rows,
- })
-
- return render_to_string('debug_toolbar/panels/timer.html', context)
+ context.update({'rows': rows,})
+ return render_to_string(self.template, context)
diff --git a/debug_toolbar/panels/version.py b/debug_toolbar/panels/version.py
index 6a7c54e..4e58971 100644
--- a/debug_toolbar/panels/version.py
+++ b/debug_toolbar/panels/version.py
@@ -2,10 +2,8 @@ import sys
import django
from django.conf import settings
-from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
-from debug_toolbar.middleware import DebugToolbarMiddleware
from debug_toolbar.panels import DebugPanel
@@ -14,6 +12,7 @@ class VersionDebugPanel(DebugPanel):
Panel that displays the Django version.
"""
name = 'Version'
+ template = 'debug_toolbar/panels/versions.html'
has_content = True
def nav_title(self):
@@ -51,15 +50,7 @@ class VersionDebugPanel(DebugPanel):
version = '.'.join(str(o) for o in version)
versions[name] = version
- self.stats = {
+ self.record_stats({
'versions': versions,
'paths': sys.path,
- }
-
- toolbar = DebugToolbarMiddleware.get_current()
- toolbar.stats['version'] = self.stats
-
- def content(self):
- context = self.context.copy()
- context.update(self.stats)
- return render_to_string('debug_toolbar/panels/versions.html', context)
+ })