aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/panels
diff options
context:
space:
mode:
Diffstat (limited to 'debug_toolbar/panels')
-rw-r--r--debug_toolbar/panels/profiling.py1
-rw-r--r--debug_toolbar/panels/request_vars.py16
-rw-r--r--debug_toolbar/panels/sql.py7
-rw-r--r--debug_toolbar/panels/template.py48
-rw-r--r--debug_toolbar/panels/version.py1
5 files changed, 48 insertions, 25 deletions
diff --git a/debug_toolbar/panels/profiling.py b/debug_toolbar/panels/profiling.py
index 53e333e..b3dedf8 100644
--- a/debug_toolbar/panels/profiling.py
+++ b/debug_toolbar/panels/profiling.py
@@ -159,6 +159,7 @@ class ProfilingDebugPanel(DebugPanel):
self._unwrap_closure_and_profile(cell.cell_contents)
def process_view(self, request, view_func, view_args, view_kwargs):
+ __traceback_hide__ = True
self.profiler = cProfile.Profile()
args = (request,) + view_args
if DJ_PROFILE_USE_LINE_PROFILER:
diff --git a/debug_toolbar/panels/request_vars.py b/debug_toolbar/panels/request_vars.py
index 956e028..6e7dd03 100644
--- a/debug_toolbar/panels/request_vars.py
+++ b/debug_toolbar/panels/request_vars.py
@@ -1,6 +1,8 @@
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.utils import get_name_from_obj
class RequestVarsDebugPanel(DebugPanel):
"""
@@ -9,6 +11,12 @@ class RequestVarsDebugPanel(DebugPanel):
name = 'RequestVars'
has_content = True
+ def __init__(self, *args, **kwargs):
+ DebugPanel.__init__(self, *args, **kwargs)
+ self.view_func = None
+ self.view_args = None
+ self.view_kwargs = None
+
def nav_title(self):
return _('Request Vars')
@@ -28,11 +36,17 @@ class RequestVarsDebugPanel(DebugPanel):
def content(self):
context = self.context.copy()
+
+ if self.view_func is not None:
+ name = get_name_from_obj(self.view_func)
+ else:
+ name = '<no view>'
+
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_func': name,
'view_args': self.view_args,
'view_kwargs': self.view_kwargs
})
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py
index ff63b6f..841aaac 100644
--- a/debug_toolbar/panels/sql.py
+++ b/debug_toolbar/panels/sql.py
@@ -183,8 +183,10 @@ class SQLDebugPanel(DebugPanel):
query['rgb_color'] = self._databases[alias]['rgb_color']
try:
query['width_ratio'] = (query['duration'] / self._sql_time) * 100
+ query['width_ratio_relative'] = 100.0 * query['width_ratio'] / (100.0 - width_ratio_tally)
except ZeroDivisionError:
query['width_ratio'] = 0
+ query['width_ratio_relative'] = 0
query['start_offset'] = width_ratio_tally
query['end_offset'] = query['width_ratio'] + query['start_offset']
width_ratio_tally += query['width_ratio']
@@ -192,7 +194,7 @@ class SQLDebugPanel(DebugPanel):
stacktrace = []
for frame in query['stacktrace']:
params = map(escape, frame[0].rsplit('/', 1) + list(frame[1:]))
- stacktrace.append('<span class="path">{0}/</span><span class="file">{1}</span> in <span class="func">{3}</span>(<span class="lineno">{2}</span>)\n <span class="code">{4}</span>"'.format(*params))
+ stacktrace.append(u'<span class="path">{0}/</span><span class="file">{1}</span> in <span class="func">{3}</span>(<span class="lineno">{2}</span>)\n <span class="code">{4}</span>'.format(*params))
query['stacktrace'] = mark_safe('\n'.join(stacktrace))
i += 1
@@ -221,7 +223,8 @@ class BoldKeywordFilter(sqlparse.filters.Filter):
yield sqlparse.tokens.Text, '</strong>'
def swap_fields(sql):
- return re.sub('SELECT</strong> (.*) <strong>FROM', 'SELECT</strong> <span class="djDebugCollapse">\g<1></span> <strong>FROM', sql)
+ return re.sub('SELECT</strong> (.*) <strong>FROM', 'SELECT</strong> <a class="djDebugUncollapsed djDebugToggle" href="#">&bull;&bull;&bull;</a> ' +
+ '<a class="djDebugCollapsed djDebugToggle" href="#">\g<1></a> <strong>FROM', sql)
def reformat_sql(sql):
stack = sqlparse.engine.FilterStack()
diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py
index 44b8b3e..0715c0a 100644
--- a/debug_toolbar/panels/template.py
+++ b/debug_toolbar/panels/template.py
@@ -47,6 +47,29 @@ class TemplateDebugPanel(DebugPanel):
template_rendered.connect(self._store_template_info)
def _store_template_info(self, sender, **kwargs):
+ context_data = kwargs['context']
+
+ context_list = []
+ for context_layer in context_data.dicts:
+ if hasattr(context_layer, 'items'):
+ for key, value in context_layer.items():
+ # Replace any request elements - they have a large
+ # unicode representation and the request data is
+ # already made available from the Request Vars panel.
+ if isinstance(value, http.HttpRequest):
+ context_layer[key] = '<<request>>'
+ # Replace the debugging sql_queries element. The SQL
+ # data is already made available from the SQL panel.
+ elif key == 'sql_queries' and isinstance(value, list):
+ context_layer[key] = '<<sql_queries>>'
+ # Replace LANGUAGES, which is available in i18n context processor
+ elif key == 'LANGUAGES' and isinstance(value, tuple):
+ context_layer[key] = '<<languages>>'
+ try:
+ context_list.append(pformat(context_layer))
+ except UnicodeEncodeError:
+ pass
+ kwargs['context'] = context_list
self.templates.append(kwargs)
def nav_title(self):
@@ -78,6 +101,8 @@ class TemplateDebugPanel(DebugPanel):
# Skip templates that we are generating through the debug toolbar.
if template.name and template.name.startswith('debug_toolbar/'):
continue
+ if not hasattr(template, 'origin'):
+ continue
if template.origin and template.origin.name:
template.origin_name = template.origin.name
else:
@@ -85,28 +110,7 @@ class TemplateDebugPanel(DebugPanel):
info['template'] = template
# Clean up context for better readability
if getattr(settings, 'DEBUG_TOOLBAR_CONFIG', {}).get('SHOW_TEMPLATE_CONTEXT', True):
- context_data = template_data.get('context', None)
-
- context_list = []
- for context_layer in context_data.dicts:
- if hasattr(context_layer, 'items'):
- for key, value in context_layer.items():
- # Replace any request elements - they have a large
- # unicode representation and the request data is
- # already made available from the Request Vars panel.
- if isinstance(value, http.HttpRequest):
- context_layer[key] = '<<request>>'
- # Replace the debugging sql_queries element. The SQL
- # data is already made available from the SQL panel.
- elif key == 'sql_queries' and isinstance(value, list):
- context_layer[key] = '<<sql_queries>>'
- # Replace LANGUAGES, which is available in i18n context processor
- elif key == 'LANGUAGES' and isinstance(value, tuple):
- context_layer[key] = '<<languages>>'
- try:
- context_list.append(pformat(context_layer))
- except UnicodeEncodeError:
- pass
+ context_list = template_data.get('context', [])
info['context'] = '\n'.join(context_list)
template_context.append(info)
diff --git a/debug_toolbar/panels/version.py b/debug_toolbar/panels/version.py
index 098ab62..f0d8fbc 100644
--- a/debug_toolbar/panels/version.py
+++ b/debug_toolbar/panels/version.py
@@ -30,6 +30,7 @@ class VersionDebugPanel(DebugPanel):
def content(self):
versions = {}
+ versions['Python'] = '%d.%d.%d' % sys.version_info[:3]
for app in settings.INSTALLED_APPS + ['django']:
name = app.split('.')[-1].replace('_', ' ').capitalize()
__import__(app)