aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Adams2010-01-14 08:02:49 -0800
committerRob Hudson2010-01-14 08:02:49 -0800
commit4baa51e0be674428a2314e08efe43628184bc42a (patch)
treed3584431a61ad1fbdf885e024950f472b89ff21e
parentfba93b813f90430545d5acaa25ef218f792360ab (diff)
downloaddjango-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__.py8
-rw-r--r--debug_toolbar/panels/cache.py14
-rw-r--r--debug_toolbar/panels/headers.py5
-rw-r--r--debug_toolbar/panels/logger.py7
-rw-r--r--debug_toolbar/panels/request_vars.py9
-rw-r--r--debug_toolbar/panels/settings_vars.py5
-rw-r--r--debug_toolbar/panels/signals.py6
-rw-r--r--debug_toolbar/panels/sql.py9
-rw-r--r--debug_toolbar/panels/template.py10
-rw-r--r--debug_toolbar/panels/timer.py7
-rw-r--r--debug_toolbar/panels/version.py5
-rw-r--r--debug_toolbar/toolbar/loader.py14
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)