diff options
| author | bkonkle | 2011-09-15 10:36:11 -0500 |
|---|---|---|
| committer | bkonkle | 2011-09-15 10:36:11 -0500 |
| commit | 717dc6815a9d4ddcd30efc17db11ade0f8f38354 (patch) | |
| tree | 5f3a3fceefe9bead41019c3216991337cc12fe6f /debug_toolbar/panels | |
| parent | ed9bca7c00f6f326842d79e843f678787fac8b15 (diff) | |
| download | django-debug-toolbar-717dc6815a9d4ddcd30efc17db11ade0f8f38354.tar.bz2 | |
Edited all of the panels to use the stats API and not override the content method
Diffstat (limited to 'debug_toolbar/panels')
| -rw-r--r-- | debug_toolbar/panels/cache.py | 14 | ||||
| -rw-r--r-- | debug_toolbar/panels/headers.py | 14 | ||||
| -rw-r--r-- | debug_toolbar/panels/logger.py | 15 | ||||
| -rw-r--r-- | debug_toolbar/panels/profiling.py | 27 | ||||
| -rw-r--r-- | debug_toolbar/panels/request_vars.py | 19 | ||||
| -rw-r--r-- | debug_toolbar/panels/settings_vars.py | 14 | ||||
| -rw-r--r-- | debug_toolbar/panels/signals.py | 12 | ||||
| -rw-r--r-- | debug_toolbar/panels/sql.py | 20 | ||||
| -rw-r--r-- | debug_toolbar/panels/template.py | 17 | ||||
| -rw-r--r-- | debug_toolbar/panels/timer.py | 43 | ||||
| -rw-r--r-- | debug_toolbar/panels/version.py | 15 |
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="#">•••</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) + }) |
