diff options
| author | Chris Adams | 2010-01-14 08:02:49 -0800 | 
|---|---|---|
| committer | Rob Hudson | 2010-01-14 08:02:49 -0800 | 
| commit | 4baa51e0be674428a2314e08efe43628184bc42a (patch) | |
| tree | d3584431a61ad1fbdf885e024950f472b89ff21e | |
| parent | fba93b813f90430545d5acaa25ef218f792360ab (diff) | |
| download | django-debug-toolbar-4baa51e0be674428a2314e08efe43628184bc42a.tar.bz2 | |
Template panel context cleanup.
All panels get a copy of the template context when created and use an updated
copy when rendering so they can have full access to context vars and avoid
making changes to the shared context.
Signed-off-by: Rob Hudson <rob@cogit8.org>
| -rw-r--r-- | debug_toolbar/panels/__init__.py | 8 | ||||
| -rw-r--r-- | debug_toolbar/panels/cache.py | 14 | ||||
| -rw-r--r-- | debug_toolbar/panels/headers.py | 5 | ||||
| -rw-r--r-- | debug_toolbar/panels/logger.py | 7 | ||||
| -rw-r--r-- | debug_toolbar/panels/request_vars.py | 9 | ||||
| -rw-r--r-- | debug_toolbar/panels/settings_vars.py | 5 | ||||
| -rw-r--r-- | debug_toolbar/panels/signals.py | 6 | ||||
| -rw-r--r-- | debug_toolbar/panels/sql.py | 9 | ||||
| -rw-r--r-- | debug_toolbar/panels/template.py | 10 | ||||
| -rw-r--r-- | debug_toolbar/panels/timer.py | 7 | ||||
| -rw-r--r-- | debug_toolbar/panels/version.py | 5 | ||||
| -rw-r--r-- | debug_toolbar/toolbar/loader.py | 14 | 
12 files changed, 67 insertions, 32 deletions
| diff --git a/debug_toolbar/panels/__init__.py b/debug_toolbar/panels/__init__.py index cf65aa8..fa2e4b6 100644 --- a/debug_toolbar/panels/__init__.py +++ b/debug_toolbar/panels/__init__.py @@ -7,9 +7,13 @@ class DebugPanel(object):      # name = Base      has_content = False # If content returns something, set to true in subclass +    # We'll maintain a local context instance so we can expose our template +    # context variables to panels which need them: +    context = {} +      # Panel methods -    def __init__(self): -        pass +    def __init__(self, context={}): +        self.context.update(context)      def dom_id(self):          return 'djDebug%sPanel' % (self.name.replace(' ', '')) diff --git a/debug_toolbar/panels/cache.py b/debug_toolbar/panels/cache.py index 61b5690..5617ec2 100644 --- a/debug_toolbar/panels/cache.py +++ b/debug_toolbar/panels/cache.py @@ -76,7 +76,8 @@ class CacheDebugPanel(DebugPanel):      name = 'Cache'      has_content = True -    def __init__(self): +    def __init__(self, *args, **kwargs): +        super(self.__class__, self).__init__(*args, **kwargs)          # This is hackish but to prevent threading issues is somewhat needed          if isinstance(cache.cache, CacheStatTracker):              cache.cache.reset() @@ -95,9 +96,10 @@ class CacheDebugPanel(DebugPanel):          return ''      def content(self): -        context = dict( -            cache_calls = len(self.cache.calls), -            cache_time = self.cache.total_time, -            cache = self.cache, -        ) +        context = self.context.copy() +        context.update({ +            'cache_calls': len(self.cache.calls), +            'cache_time': self.cache.total_time, +            'cache': self.cache, +        })          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 7a44c2d..1e929f6 100644 --- a/debug_toolbar/panels/headers.py +++ b/debug_toolbar/panels/headers.py @@ -47,7 +47,8 @@ class HeaderDebugPanel(DebugPanel):          )      def content(self): -        context = { +        context = self.context.copy() +        context.update({              'headers': self.headers -        } +        })          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 99f2602..620102e 100644 --- a/debug_toolbar/panels/logger.py +++ b/debug_toolbar/panels/logger.py @@ -75,4 +75,9 @@ class LoggingPanel(DebugPanel):                  'file': record.pathname,                  'line': record.lineno,              }) -        return render_to_string('debug_toolbar/panels/logger.html', {'records': records}) + +        context = self.context.copy() +        context.update({'records': records}) + +        return render_to_string('debug_toolbar/panels/logger.html', context) + diff --git a/debug_toolbar/panels/request_vars.py b/debug_toolbar/panels/request_vars.py index cea5ec7..956e028 100644 --- a/debug_toolbar/panels/request_vars.py +++ b/debug_toolbar/panels/request_vars.py @@ -27,15 +27,18 @@ class RequestVarsDebugPanel(DebugPanel):          self.view_kwargs = view_kwargs      def content(self): -        context = { +        context = self.context.copy() +        context.update({              '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],              'view_func': '%s.%s' % (self.view_func.__module__, self.view_func.__name__),              'view_args': self.view_args,              'view_kwargs': self.view_kwargs -        } +        })          if hasattr(self.request, 'session'): -            context['session'] = [(k, self.request.session.get(k)) for k in self.request.session.iterkeys()] +            context.update({ +                'session': [(k, self.request.session.get(k)) for k in self.request.session.iterkeys()] +            })          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 8243acf..ebb4464 100644 --- a/debug_toolbar/panels/settings_vars.py +++ b/debug_toolbar/panels/settings_vars.py @@ -22,7 +22,8 @@ class SettingsVarsDebugPanel(DebugPanel):          return ''      def content(self): -        context = { +        context = self.context.copy() +        context.update({              'settings': get_safe_settings(), -        } +        })          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 ed5f92f..dbd3725 100644 --- a/debug_toolbar/panels/signals.py +++ b/debug_toolbar/panels/signals.py @@ -80,4 +80,8 @@ class SignalDebugPanel(DebugPanel):                      text = "function %s" % receiver.__name__                  receivers.append(text)              signals.append((name, signal, receivers)) -        return render_to_string('debug_toolbar/panels/signals.html', {'signals': signals}) + +        context = self.context.copy() +        context.update({'signals': signals}) + +        return render_to_string('debug_toolbar/panels/signals.html', context) diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index 7fa4423..1ac8445 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -137,7 +137,8 @@ class SQLDebugPanel(DebugPanel):      name = 'SQL'      has_content = True -    def __init__(self): +    def __init__(self, *args, **kwargs): +        super(self.__class__, self).__init__(*args, **kwargs)          self._offset = len(connection.queries)          self._sql_time = 0          self._queries = [] @@ -173,11 +174,13 @@ class SQLDebugPanel(DebugPanel):              query['start_offset'] = width_ratio_tally              width_ratio_tally += query['width_ratio'] -        context = { +        context = self.context.copy() +        context.update({              'queries': self._queries,              'sql_time': self._sql_time,              'is_mysql': settings.DATABASE_ENGINE == 'mysql', -        } +        }) +          return render_to_string('debug_toolbar/panels/sql.html', context)  def ms_from_timedelta(td): diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py index 86b1c3e..fe34729 100644 --- a/debug_toolbar/panels/template.py +++ b/debug_toolbar/panels/template.py @@ -36,7 +36,8 @@ class TemplateDebugPanel(DebugPanel):      name = 'Template'      has_content = True -    def __init__(self): +    def __init__(self, *args, **kwargs): +        super(self.__class__, self).__init__(*args, **kwargs)          self.templates = []          template_rendered.connect(self._store_template_info) @@ -103,9 +104,12 @@ class TemplateDebugPanel(DebugPanel):                          pass                  info['context'] = '\n'.join(context_list)              template_context.append(info) -        context = { + +        context = self.context.copy() +        context.update({              'templates': template_context,              'template_dirs': [normpath(x) for x in settings.TEMPLATE_DIRS],              'context_processors': context_processors, -        } +        }) +          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 583c1c0..d866166 100644 --- a/debug_toolbar/panels/timer.py +++ b/debug_toolbar/panels/timer.py @@ -84,7 +84,10 @@ class TimerDebugPanel(DebugPanel):  #            ('Page faults', '%d no i/o, %d requiring i/o' % (minflt, majflt)),  #            ('Disk operations', '%d in, %d out, %d swapout' % (blkin, blkout, swap)),          ) -        context = { + +        context = self.context.copy() +        context.update({              'rows': rows, -        } +        }) +          return render_to_string('debug_toolbar/panels/timer.html', context) diff --git a/debug_toolbar/panels/version.py b/debug_toolbar/panels/version.py index 96a4535..098ab62 100644 --- a/debug_toolbar/panels/version.py +++ b/debug_toolbar/panels/version.py @@ -50,7 +50,10 @@ class VersionDebugPanel(DebugPanel):                  version = '.'.join(str(o) for o in version)              versions[name] = version -        return render_to_string('debug_toolbar/panels/versions.html', { +        context = self.context.copy() +        context.update({              'versions': versions,              'paths': sys.path,          }) + +        return render_to_string('debug_toolbar/panels/versions.html', context) diff --git a/debug_toolbar/toolbar/loader.py b/debug_toolbar/toolbar/loader.py index c7f999e..8e89aef 100644 --- a/debug_toolbar/toolbar/loader.py +++ b/debug_toolbar/toolbar/loader.py @@ -11,6 +11,9 @@ class DebugToolbar(object):          self.config = {              'INTERCEPT_REDIRECTS': True,          } +        self.template_context = { +            'BASE_URL': self.request.META.get('SCRIPT_NAME', ''), +        }          # Override this tuple by copying to settings.py as `DEBUG_TOOLBAR_PANELS`          self.default_panels = (              'debug_toolbar.panels.version.VersionDebugPanel', @@ -56,9 +59,8 @@ class DebugToolbar(object):                  raise exceptions.ImproperlyConfigured, 'Toolbar Panel module "%s" does not define a "%s" class' % (panel_module, panel_classname)              try: -                panel_instance = panel_class() +                panel_instance = panel_class(context=self.template_context)              except: -                print panel_class                  raise # Bubble up problem loading panel              self.panels.append(panel_instance) @@ -67,7 +69,7 @@ class DebugToolbar(object):          """          Renders the overall Toolbar with panels inside.          """ -        return render_to_string('debug_toolbar/base.html', { -            'panels': self.panels, -            'BASE_URL': self.request.META.get('SCRIPT_NAME', ''), -        }) +        context = self.template_context.copy() +        context.update({ 'panels': self.panels, }) + +        return render_to_string('debug_toolbar/base.html', context) | 
