diff options
| -rw-r--r-- | debug_toolbar/panels/__init__.py | 8 | ||||
| -rw-r--r-- | debug_toolbar/panels/redirects.py | 2 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/base.html | 6 | ||||
| -rw-r--r-- | debug_toolbar/toolbar.py | 40 | ||||
| -rw-r--r-- | debug_toolbar/views.py | 7 | ||||
| -rw-r--r-- | tests/panels/test_cache.py | 4 | ||||
| -rw-r--r-- | tests/panels/test_logger.py | 5 | ||||
| -rw-r--r-- | tests/panels/test_request_vars.py | 4 | ||||
| -rw-r--r-- | tests/panels/test_sql.py | 4 | ||||
| -rw-r--r-- | tests/panels/test_template.py | 7 | ||||
| -rw-r--r-- | tests/test_integration.py | 3 | 
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'] | 
