From 717dc6815a9d4ddcd30efc17db11ade0f8f38354 Mon Sep 17 00:00:00 2001 From: bkonkle Date: Thu, 15 Sep 2011 10:36:11 -0500 Subject: Edited all of the panels to use the stats API and not override the content method --- debug_toolbar/panels/cache.py | 14 +++--------- debug_toolbar/panels/headers.py | 14 +++--------- debug_toolbar/panels/logger.py | 15 +++--------- debug_toolbar/panels/profiling.py | 27 ++++++++-------------- debug_toolbar/panels/request_vars.py | 19 ++++------------ debug_toolbar/panels/settings_vars.py | 14 +++--------- debug_toolbar/panels/signals.py | 12 ++-------- debug_toolbar/panels/sql.py | 20 ++++++++-------- debug_toolbar/panels/template.py | 17 ++++---------- debug_toolbar/panels/timer.py | 43 +++++++++++++++++------------------ debug_toolbar/panels/version.py | 15 +++--------- 11 files changed, 67 insertions(+), 143 deletions(-) (limited to 'debug_toolbar') 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 = '' - 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, '' + def swap_fields(sql): return re.sub('SELECT (.*) FROM', 'SELECT ••• ' + '\g<1> 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=''): @@ -35,11 +34,13 @@ def new_template_init(self, template_string, origin=None, name='