diff options
Diffstat (limited to 'debug_toolbar/panels')
| -rw-r--r-- | debug_toolbar/panels/profiling.py | 1 | ||||
| -rw-r--r-- | debug_toolbar/panels/request_vars.py | 16 | ||||
| -rw-r--r-- | debug_toolbar/panels/sql.py | 7 | ||||
| -rw-r--r-- | debug_toolbar/panels/template.py | 48 | ||||
| -rw-r--r-- | debug_toolbar/panels/version.py | 1 |
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="#">•••</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) |
