aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAymeric Augustin2013-11-16 09:47:14 +0100
committerAymeric Augustin2013-11-16 10:10:09 +0100
commit71a2c1237de8ed759c3ba415c8bfd91b62adf193 (patch)
tree00bc509a00075a0a9266832ff054d9a2e80b9f6f
parent6334983458abd4380c21275d1229527778cf93a6 (diff)
downloaddjango-debug-toolbar-71a2c1237de8ed759c3ba415c8bfd91b62adf193.tar.bz2
Clean up DebugToolbar class, especially panels handling.
-rw-r--r--debug_toolbar/panels/__init__.py8
-rw-r--r--debug_toolbar/panels/redirects.py2
-rw-r--r--debug_toolbar/templates/debug_toolbar/base.html6
-rw-r--r--debug_toolbar/toolbar.py40
-rw-r--r--debug_toolbar/views.py7
-rw-r--r--tests/panels/test_cache.py4
-rw-r--r--tests/panels/test_logger.py5
-rw-r--r--tests/panels/test_request_vars.py4
-rw-r--r--tests/panels/test_sql.py4
-rw-r--r--tests/panels/test_template.py7
-rw-r--r--tests/test_integration.py3
11 files changed, 42 insertions, 48 deletions
diff --git a/debug_toolbar/panels/__init__.py b/debug_toolbar/panels/__init__.py
index d64aac2..37d7eb7 100644
--- a/debug_toolbar/panels/__init__.py
+++ b/debug_toolbar/panels/__init__.py
@@ -31,11 +31,13 @@ class DebugPanel(object):
context.update(self.get_stats())
return render_to_string(self.template, context)
- def dom_id(self):
- return 'djDebug%sPanel' % (self.name.replace(' ', ''))
+ @property
+ def panel_id(self):
+ return self.__class__.__name__
+ @property
def enabled(self):
- return self.toolbar.request.COOKIES.get(self.dom_id(), 'on') == 'on'
+ return self.toolbar.request.COOKIES.get('djdt' + self.panel_id, 'on') == 'on'
# URLs for panel-specific views
diff --git a/debug_toolbar/panels/redirects.py b/debug_toolbar/panels/redirects.py
index 244f7ed..22add70 100644
--- a/debug_toolbar/panels/redirects.py
+++ b/debug_toolbar/panels/redirects.py
@@ -18,7 +18,7 @@ class InterceptRedirectsPanel(DebugPanel):
def enabled(self):
default = 'on' if self.toolbar.config['INTERCEPT_REDIRECTS'] else 'off'
- return self.toolbar.request.COOKIES.get(self.dom_id(), default) == 'on'
+ return self.toolbar.request.COOKIES.get('djdt' + self.panel_id, default) == 'on'
def process_response(self, request, response):
if isinstance(response, HttpResponseRedirect):
diff --git a/debug_toolbar/templates/debug_toolbar/base.html b/debug_toolbar/templates/debug_toolbar/base.html
index 19b32cf..424dc57 100644
--- a/debug_toolbar/templates/debug_toolbar/base.html
+++ b/debug_toolbar/templates/debug_toolbar/base.html
@@ -20,9 +20,9 @@ if(!window.jQuery) document.write('<scr'+'ipt src="{{ STATIC_URL }}debug_toolbar
{% endif %}
{% for panel in panels %}
<li class="djDebugPanelButton">
- <input type="checkbox" data-cookie="{{ panel.dom_id }}" {% if panel.enabled %}checked="checked" title="{% trans "Disable for next and successive requests" %}"{% else %}title="{% trans "Enable for next and successive requests" %}"{% endif %} />
+ <input type="checkbox" data-cookie="djdt{{ panel.panel_id }}" {% if panel.enabled %}checked="checked" title="{% trans "Disable for next and successive requests" %}"{% else %}title="{% trans "Enable for next and successive requests" %}"{% endif %} />
{% if panel.has_content and panel.enabled %}
- <a href="{{ panel.url|default:"#" }}" title="{{ panel.title }}" class="{{ panel.dom_id }}">
+ <a href="{{ panel.url|default:"#" }}" title="{{ panel.title }}" class="{{ panel.panel_id }}">
{% else %}
<div class="contentless{% if not panel.enabled %} disabled{% endif %}">
{% endif %}
@@ -46,7 +46,7 @@ if(!window.jQuery) document.write('<scr'+'ipt src="{{ STATIC_URL }}debug_toolbar
</div>
{% for panel in panels %}
{% if panel.has_content and panel.enabled %}
- <div id="{{ panel.dom_id }}" class="panelContent">
+ <div id="{{ panel.panel_id }}" class="panelContent">
<div class="djDebugPanelTitle">
<a href="" class="djDebugClose">{% trans "Close" %}</a>
<h3>{{ panel.title|safe }}</h3>
diff --git a/debug_toolbar/toolbar.py b/debug_toolbar/toolbar.py
index acb86d9..8b48a9f 100644
--- a/debug_toolbar/toolbar.py
+++ b/debug_toolbar/toolbar.py
@@ -29,28 +29,34 @@ class DebugToolbar(object):
'STATIC_URL': settings.STATIC_URL,
'TOOLBAR_ROOT_TAG_ATTRS': self.config['ROOT_TAG_ATTRS'],
}
-
- self.load_panels()
self.stats = {}
+ for panel_class in self.get_panel_classes():
+ panel_instance = panel_class(self, context=self.template_context)
+ self._panels[panel_instance.panel_id] = panel_instance
- def _get_panels(self):
- return list(self._panels.values())
- panels = property(_get_panels)
+ # Manage panels
- def _get_enabled_panels(self):
- return [panel for panel in self._panels.values() if panel.enabled()]
- enabled_panels = property(_get_enabled_panels)
+ @property
+ def panels(self):
+ """
+ Get a list of all available panels.
+ """
+ return list(self._panels.values())
- def get_panel(self, cls):
- return self._panels[cls]
+ @property
+ def enabled_panels(self):
+ """
+ Get a list of panels enabled for the current request.
+ """
+ return [panel for panel in self._panels.values() if panel.enabled]
- def load_panels(self):
+ def get_panel_by_id(self, panel_id):
"""
- Populate debug panels
+ Get the panel with the given id, which is the class name by default.
"""
- for panel_class in self.get_panel_classes():
- panel_instance = panel_class(self, context=self.template_context)
- self._panels[panel_class] = panel_instance
+ return self._panels[panel_id]
+
+ # Handle rendering the toolbar in HTML
def render_toolbar(self):
"""
@@ -86,8 +92,8 @@ class DebugToolbar(object):
def fetch(cls, storage_id):
return cls._storage.get(storage_id)
- # Manually implement class-level caching of the list of panels because
- # it's more obvious than going through an abstraction.
+ # Manually implement class-level caching of panel classes and url patterns
+ # because it's more obvious than going through an abstraction.
_panel_classes = None
diff --git a/debug_toolbar/views.py b/debug_toolbar/views.py
index 07e38d9..eb67e8b 100644
--- a/debug_toolbar/views.py
+++ b/debug_toolbar/views.py
@@ -15,9 +15,6 @@ def render_panel(request):
"Please reload the page and retry.")
content = "<p>%s</p>" % escape(content)
else:
- panel_id = request.GET['panel_id']
- for panel in toolbar.panels:
- if panel.dom_id() == panel_id:
- content = panel.content()
- break
+ panel = toolbar.get_panel_by_id(request.GET['panel_id'])
+ content = panel.content()
return HttpResponse(content)
diff --git a/tests/panels/test_cache.py b/tests/panels/test_cache.py
index f3c359c..42a6814 100644
--- a/tests/panels/test_cache.py
+++ b/tests/panels/test_cache.py
@@ -4,8 +4,6 @@ from __future__ import unicode_literals
from django.core import cache
-from debug_toolbar.panels.cache import CacheDebugPanel
-
from ..base import BaseTestCase
@@ -13,7 +11,7 @@ class CachePanelTestCase(BaseTestCase):
def setUp(self):
super(CachePanelTestCase, self).setUp()
- self.panel = self.toolbar.get_panel(CacheDebugPanel)
+ self.panel = self.toolbar.get_panel_by_id('CacheDebugPanel')
self.panel.enable_instrumentation()
def tearDown(self):
diff --git a/tests/panels/test_logger.py b/tests/panels/test_logger.py
index 9a3ac37..f5fe375 100644
--- a/tests/panels/test_logger.py
+++ b/tests/panels/test_logger.py
@@ -2,8 +2,7 @@ from __future__ import unicode_literals
import logging
-from debug_toolbar.panels.logger import (
- LoggingPanel, MESSAGE_IF_STRING_REPRESENTATION_INVALID)
+from debug_toolbar.panels.logger import MESSAGE_IF_STRING_REPRESENTATION_INVALID
from ..base import BaseTestCase
@@ -12,7 +11,7 @@ class LoggingPanelTestCase(BaseTestCase):
def setUp(self):
super(LoggingPanelTestCase, self).setUp()
- self.panel = self.toolbar.get_panel(LoggingPanel)
+ self.panel = self.toolbar.get_panel_by_id('LoggingPanel')
self.logger = logging.getLogger(__name__)
def test_happy_case(self):
diff --git a/tests/panels/test_request_vars.py b/tests/panels/test_request_vars.py
index 5366105..a86956f 100644
--- a/tests/panels/test_request_vars.py
+++ b/tests/panels/test_request_vars.py
@@ -4,8 +4,6 @@ from __future__ import unicode_literals
from django.utils import six
-from debug_toolbar.panels.request_vars import RequestVarsDebugPanel
-
from ..base import BaseTestCase
@@ -13,7 +11,7 @@ class RequestVarsDebugPanelTestCase(BaseTestCase):
def setUp(self):
super(RequestVarsDebugPanelTestCase, self).setUp()
- self.panel = self.toolbar.get_panel(RequestVarsDebugPanel)
+ self.panel = self.toolbar.get_panel_by_id('RequestVarsDebugPanel')
def test_non_ascii_session(self):
self.request.session = {'où': 'où'}
diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py
index 56b70dc..4a18a16 100644
--- a/tests/panels/test_sql.py
+++ b/tests/panels/test_sql.py
@@ -7,8 +7,6 @@ from django.db import connection
from django.db.utils import DatabaseError
from django.utils import unittest
-from debug_toolbar.panels.sql import SQLDebugPanel
-
from ..base import BaseTestCase
@@ -16,7 +14,7 @@ class SQLPanelTestCase(BaseTestCase):
def setUp(self):
super(SQLPanelTestCase, self).setUp()
- self.panel = self.toolbar.get_panel(SQLDebugPanel)
+ self.panel = self.toolbar.get_panel_by_id('SQLDebugPanel')
self.panel.enable_instrumentation()
def tearDown(self):
diff --git a/tests/panels/test_template.py b/tests/panels/test_template.py
index 545ad9b..1c43982 100644
--- a/tests/panels/test_template.py
+++ b/tests/panels/test_template.py
@@ -6,9 +6,6 @@ import django
from django.contrib.auth.models import User
from django.template import Template, Context
-from debug_toolbar.panels.template import TemplateDebugPanel
-from debug_toolbar.panels.sql import SQLDebugPanel
-
from ..base import BaseTestCase
from ..models import NonAsciiRepr
@@ -17,8 +14,8 @@ class TemplateDebugPanelTestCase(BaseTestCase):
def setUp(self):
super(TemplateDebugPanelTestCase, self).setUp()
- self.panel = self.toolbar.get_panel(TemplateDebugPanel)
- self.sql_panel = self.toolbar.get_panel(SQLDebugPanel)
+ self.panel = self.toolbar.get_panel_by_id('TemplateDebugPanel')
+ self.sql_panel = self.toolbar.get_panel_by_id('SQLDebugPanel')
self.sql_panel.enable_instrumentation()
def tearDown(self):
diff --git a/tests/test_integration.py b/tests/test_integration.py
index 412b14b..1885b35 100644
--- a/tests/test_integration.py
+++ b/tests/test_integration.py
@@ -8,7 +8,6 @@ from django.test import TestCase, RequestFactory
from django.test.utils import override_settings
from debug_toolbar.middleware import DebugToolbarMiddleware, show_toolbar
-from debug_toolbar.panels.request_vars import RequestVarsDebugPanel
from .base import BaseTestCase
from .views import regular_view
@@ -36,7 +35,7 @@ class DebugToolbarTestCase(BaseTestCase):
def _resolve_stats(self, path):
# takes stats from RequestVars panel
self.request.path = path
- panel = self.toolbar.get_panel(RequestVarsDebugPanel)
+ panel = self.toolbar.get_panel_by_id('RequestVarsDebugPanel')
panel.process_request(self.request)
panel.process_response(self.request, self.response)
return self.toolbar.stats['requestvars']