diff options
| author | Aymeric Augustin | 2013-11-12 22:40:20 +0100 | 
|---|---|---|
| committer | Aymeric Augustin | 2013-11-12 22:40:20 +0100 | 
| commit | 1062d9cf878b4bdc6f0e0f6434668cd7eb289998 (patch) | |
| tree | e3e400deec4a8c772fbc025e9144b0a380715b43 /debug_toolbar | |
| parent | f48039e3bad9e24a59a25ed5636b428e11784da9 (diff) | |
| download | django-debug-toolbar-1062d9cf878b4bdc6f0e0f6434668cd7eb289998.tar.bz2 | |
Make it possible for panels to provide URLs and views.
Fix #448.
Diffstat (limited to 'debug_toolbar')
| -rw-r--r-- | debug_toolbar/__init__.py | 8 | ||||
| -rw-r--r-- | debug_toolbar/models.py | 3 | ||||
| -rw-r--r-- | debug_toolbar/panels/__init__.py | 6 | ||||
| -rw-r--r-- | debug_toolbar/panels/sql.py | 9 | ||||
| -rw-r--r-- | debug_toolbar/panels/template.py | 7 | ||||
| -rw-r--r-- | debug_toolbar/toolbar.py | 17 | ||||
| -rw-r--r-- | debug_toolbar/urls.py | 18 | 
7 files changed, 49 insertions, 19 deletions
| diff --git a/debug_toolbar/__init__.py b/debug_toolbar/__init__.py index 3a8f300..61c4e7a 100644 --- a/debug_toolbar/__init__.py +++ b/debug_toolbar/__init__.py @@ -1,9 +1,17 @@  from __future__ import unicode_literals +  __all__ = ('VERSION',) +  try:      VERSION = __import__('pkg_resources') \          .get_distribution('django-debug-toolbar').version  except Exception as e:      VERSION = 'unknown' + + +from .toolbar import DebugToolbar + + +urls = DebugToolbar.get_urls(), 'djdt', 'djdt' diff --git a/debug_toolbar/models.py b/debug_toolbar/models.py index a204b13..ef1d012 100644 --- a/debug_toolbar/models.py +++ b/debug_toolbar/models.py @@ -5,6 +5,7 @@ from django.conf.urls import include, patterns, url  from django.core.urlresolvers import reverse, NoReverseMatch  from django.utils.importlib import import_module +import debug_toolbar  from debug_toolbar.middleware import DebugToolbarMiddleware @@ -50,7 +51,7 @@ def patch_root_urlconf():      except NoReverseMatch:          urlconf_module = import_module(settings.ROOT_URLCONF)          urlconf_module.urlpatterns += patterns('',                      # noqa -            url(r'^__debug__/', include('debug_toolbar.urls', namespace='djdt', app_name='djdt')), +            url(r'^__debug__/', include(debug_toolbar.urls)),          ) diff --git a/debug_toolbar/panels/__init__.py b/debug_toolbar/panels/__init__.py index e60a5e6..47ca996 100644 --- a/debug_toolbar/panels/__init__.py +++ b/debug_toolbar/panels/__init__.py @@ -37,6 +37,12 @@ class DebugPanel(object):      def dom_id(self):          return 'djDebug%sPanel' % (self.name.replace(' ', '')) +    # URLs for panel-specific views + +    @classmethod +    def get_urls(cls): +        return [] +      # Titles and subtitles      def nav_title(self): diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index 1ccdc47..8042269 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals  import uuid  from copy import copy +from django.conf.urls import patterns, url  from django.db import connections  from django.utils.translation import ugettext_lazy as _, ungettext_lazy as __ @@ -103,6 +104,14 @@ class SQLDebugPanel(DebugPanel):          self._sql_time += kwargs['duration']          self._num_queries += 1 +    @classmethod +    def get_urls(cls): +        return patterns('debug_toolbar.views',                          # noqa +            url(r'^sql_select/$', 'sql_select', name='sql_select'), +            url(r'^sql_explain/$', 'sql_explain', name='sql_explain'), +            url(r'^sql_profile/$', 'sql_profile', name='sql_profile'), +        ) +      def nav_title(self):          return _('SQL') diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py index d918cd7..562e87f 100644 --- a/debug_toolbar/panels/template.py +++ b/debug_toolbar/panels/template.py @@ -6,6 +6,7 @@ from pprint import pformat  import django  from django import http  from django.conf import settings +from django.conf.urls import patterns, url  from django.db.models.query import QuerySet, RawQuerySet  from django.template.context import get_standard_processors  from django.test.signals import template_rendered @@ -113,6 +114,12 @@ class TemplateDebugPanel(DebugPanel):          kwargs['context'] = [force_text(item) for item in context_list]          self.templates.append(kwargs) +    @classmethod +    def get_urls(cls): +        return patterns('debug_toolbar.views',                          # noqa +            url(r'^template_source/$', 'template_source', name='template_source'), +        ) +      def nav_title(self):          return _('Templates') diff --git a/debug_toolbar/toolbar.py b/debug_toolbar/toolbar.py index 32dc1b7..bf632cd 100644 --- a/debug_toolbar/toolbar.py +++ b/debug_toolbar/toolbar.py @@ -5,6 +5,7 @@ The main DebugToolbar class that loads and renders the Toolbar.  from __future__ import unicode_literals  from django.conf import settings +from django.conf.urls import patterns, url  from django.core.exceptions import ImproperlyConfigured  from django.template.loader import render_to_string  from django.utils.datastructures import SortedDict @@ -107,3 +108,19 @@ class DebugToolbar(object):                  panel_classes.append(panel_class)              cls._panel_classes = panel_classes          return cls._panel_classes + +    _urlpatterns = None + +    @classmethod +    def get_urls(cls): +        if cls._urlpatterns is None: +            # Load URLs in a temporary variable for thread safety. +            # Global URLs +            urlpatterns = patterns('debug_toolbar.views',               # noqa +                url(r'^render_panel/$', 'render_panel', name='render_panel'), +            ) +            # Per-panel URLs +            for panel_class in cls.get_panel_classes(): +                urlpatterns += panel_class.get_urls() +            cls._urlpatterns = urlpatterns +        return cls._urlpatterns diff --git a/debug_toolbar/urls.py b/debug_toolbar/urls.py deleted file mode 100644 index 860187a..0000000 --- a/debug_toolbar/urls.py +++ /dev/null @@ -1,18 +0,0 @@ -""" -URLpatterns for the debug toolbar. - -The debug toolbar middleware will monkey-patch them into the default urlconf -if they aren't explicitly included. -""" - -from __future__ import unicode_literals - -from django.conf.urls import patterns, url - -urlpatterns = patterns('debug_toolbar.views',                           # noqa -    url(r'^render_panel/$', 'render_panel', name='render_panel'), -    url(r'^sql_select/$', 'sql_select', name='sql_select'), -    url(r'^sql_explain/$', 'sql_explain', name='sql_explain'), -    url(r'^sql_profile/$', 'sql_profile', name='sql_profile'), -    url(r'^template_source/$', 'template_source', name='template_source'), -) | 
