Skip to content

Commit 7504141

Browse files
committed
Merge branch 'master' of github.com:django-debug-toolbar/django-debug-toolbar
2 parents 4ee67a1 + 2480ca9 commit 7504141

File tree

8 files changed

+60
-8
lines changed

8 files changed

+60
-8
lines changed

README.rst

+7
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,13 @@ adding proper coverage (especially if it has a chance for a regression) in the t
192192

193193
python setup.py test
194194

195+
196+
3rd Party Panels
197+
================
198+
199+
A list of 3rd party panels can be found on the Django Debug Toolbar Github wiki:
200+
https://github.com/django-debug-toolbar/django-debug-toolbar/wiki/3rd-Party-Panels
201+
195202
TODOs and BUGS
196203
==============
197204
See: https://github.com/django-debug-toolbar/django-debug-toolbar/issues

debug_toolbar/panels/request_vars.py

+12-6
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ class RequestVarsDebugPanel(DebugPanel):
99
name = 'RequestVars'
1010
has_content = True
1111

12+
def __init__(self, *args, **kwargs):
13+
DebugPanel.__init__(self, *args, **kwargs)
14+
self.view_func = None
15+
self.view_args = None
16+
self.view_kwargs = None
17+
1218
def nav_title(self):
1319
return _('Request Vars')
1420

@@ -29,18 +35,18 @@ def process_view(self, request, view_func, view_args, view_kwargs):
2935
def content(self):
3036
context = self.context.copy()
3137

32-
if hasattr(self.view_func, '__name__'):
33-
view_name = self.view_func.__name__
34-
elif hasattr(self.view_func, '__class__'):
35-
view_name = self.view_func.__class__.__name__
38+
if self.view_func is not None:
39+
module = self.view_func.__module__
40+
name = getattr(self.view_func, '__name__', None) or getattr(self.view_func.__class__,'__name__','<unknown>')
41+
view_func = '%s.%s' % (module, name)
3642
else:
37-
view_name = '<unknown>'
43+
view_func = '<no view>'
3844

3945
context.update({
4046
'get': [(k, self.request.GET.getlist(k)) for k in self.request.GET],
4147
'post': [(k, self.request.POST.getlist(k)) for k in self.request.POST],
4248
'cookies': [(k, self.request.COOKIES.get(k)) for k in self.request.COOKIES],
43-
'view_func': '%s.%s' % (self.view_func.__module__, view_name),
49+
'view_func': view_func,
4450
'view_args': self.view_args,
4551
'view_kwargs': self.view_kwargs
4652
})

debug_toolbar/panels/sql.py

+2
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,10 @@ def content(self):
183183
query['rgb_color'] = self._databases[alias]['rgb_color']
184184
try:
185185
query['width_ratio'] = (query['duration'] / self._sql_time) * 100
186+
query['width_ratio_relative'] = 100.0 * query['width_ratio'] / (100.0 - width_ratio_tally)
186187
except ZeroDivisionError:
187188
query['width_ratio'] = 0
189+
query['width_ratio_relative'] = 0
188190
query['start_offset'] = width_ratio_tally
189191
query['end_offset'] = query['width_ratio'] + query['start_offset']
190192
width_ratio_tally += query['width_ratio']

debug_toolbar/panels/template.py

+2
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ def content(self):
7878
# Skip templates that we are generating through the debug toolbar.
7979
if template.name and template.name.startswith('debug_toolbar/'):
8080
continue
81+
if not hasattr(template, 'origin'):
82+
continue
8183
if template.origin and template.origin.name:
8284
template.origin_name = template.origin.name
8385
else:

debug_toolbar/templates/debug_toolbar/panels/sql.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{% load i18n %}
2+
{% load debug_toolbar_utils %}
23
<div class="clearfix">
34
<ul class="stats">
45
{% for alias, info in databases %}
@@ -34,7 +35,7 @@
3435
</div>
3536
</td>
3637
<td class="timeline">
37-
<div class="djDebugTimeline"><div class="djDebugLineChart{% if query.is_slow %} djDebugLineChartWarning{% endif %}" style="left:{{ query.start_offset }}%;"><strong style="width:{{ query.width_ratio }}%;">{{ query.width_ratio }}%</strong></div></div>
38+
<div class="djDebugTimeline"><div class="djDebugLineChart{% if query.is_slow %} djDebugLineChartWarning{% endif %}" style="left:{{ query.start_offset|dotted_number }}%;"><strong style="width:{{ query.width_ratio_relative|dotted_number }}%;">{{ query.width_ratio }}%</strong></div></div>
3839
</td>
3940
<td class="time">
4041
{{ query.duration|floatformat:"2" }}

debug_toolbar/templatetags/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
from django import template
3+
from django.utils.numberformat import format
4+
5+
register = template.Library()
6+
7+
@register.filter
8+
def dotted_number(number):
9+
number = float(number)
10+
return format(number, '.', 6)
11+

tests/tests.py

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from debug_toolbar.middleware import DebugToolbarMiddleware
22
from debug_toolbar.panels.sql import SQLDebugPanel
3+
from debug_toolbar.panels.request_vars import RequestVarsDebugPanel
34
from debug_toolbar.toolbar.loader import DebugToolbar
45
from debug_toolbar.utils.tracking import pre_dispatch, post_dispatch, callbacks
56

@@ -133,6 +134,28 @@ def test_request_urlconf_module(self):
133134
self.assertEquals(request.urlconf.urlpatterns[0]._callback_str, 'debug_toolbar.views.debug_media')
134135
self.assertEquals(request.urlconf.urlpatterns[-1].urlconf_name.__name__, 'tests.urls')
135136

137+
def test_with_process_view(self):
138+
request = self.request
139+
140+
def _test_view(request):
141+
return HttpResponse('')
142+
143+
with Settings(DEBUG=True):
144+
panel = self.toolbar.get_panel(RequestVarsDebugPanel)
145+
panel.process_request(request)
146+
panel.process_view(request, _test_view, [], {})
147+
content = panel.content()
148+
self.assertIn('debug_toolbar.tests.tests._test_view', content)
149+
150+
def test_without_process_view(self):
151+
request = self.request
152+
153+
with Settings(DEBUG=True):
154+
panel = self.toolbar.get_panel(RequestVarsDebugPanel)
155+
panel.process_request(request)
156+
content = panel.content()
157+
self.assertIn('&lt;no view&gt;', content)
158+
136159
class SQLPanelTestCase(BaseTestCase):
137160
def test_recording(self):
138161
panel = self.toolbar.get_panel(SQLDebugPanel)
@@ -281,4 +304,4 @@ def test(**kwargs):
281304
self.assertTrue('kwargs' in foo, foo)
282305
self.assertTrue(len(foo['kwargs']), 1)
283306
self.assertTrue('foo' in foo['kwargs'])
284-
self.assertEquals(foo['kwargs']['foo'], 'bar')
307+
self.assertEquals(foo['kwargs']['foo'], 'bar')

0 commit comments

Comments
 (0)