diff options
| -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) +        }) | 
