diff options
| author | Aymeric Augustin | 2013-11-12 21:42:12 +0100 | 
|---|---|---|
| committer | Aymeric Augustin | 2013-11-12 21:42:12 +0100 | 
| commit | 02716d9ca2728e33e92806f6ed0b3d9375df53a9 (patch) | |
| tree | ceb3f1145a8fac75b92fdc980cde539a391fc5fc /debug_toolbar/toolbar.py | |
| parent | aebf8990e1e9b933f52d44348a02879c14f12577 (diff) | |
| download | django-debug-toolbar-02716d9ca2728e33e92806f6ed0b3d9375df53a9.tar.bz2 | |
Remove unnecessary nesting.
Diffstat (limited to 'debug_toolbar/toolbar.py')
| -rw-r--r-- | debug_toolbar/toolbar.py | 118 | 
1 files changed, 118 insertions, 0 deletions
| diff --git a/debug_toolbar/toolbar.py b/debug_toolbar/toolbar.py new file mode 100644 index 0000000..f9262f8 --- /dev/null +++ b/debug_toolbar/toolbar.py @@ -0,0 +1,118 @@ +""" +The main DebugToolbar class that loads and renders the Toolbar. +""" + +from __future__ import unicode_literals + +from django.conf import settings +from django.template.loader import render_to_string +from django.utils.datastructures import SortedDict +from django.utils.importlib import import_module + +from debug_toolbar.utils.settings import CONFIG + + +class DebugToolbar(object): + +    def __init__(self, request): +        self.request = request +        self._panels = SortedDict() +        base_url = self.request.META.get('SCRIPT_NAME', '') +        self.config = {} +        self.config.update(CONFIG) +        self.template_context = { +            'BASE_URL': base_url,  # for backwards compatibility +            'STATIC_URL': settings.STATIC_URL, +            'TOOLBAR_ROOT_TAG_ATTRS': self.config['ROOT_TAG_ATTRS'], +        } + +        self.load_panels() +        self.stats = {} + +    def _get_panels(self): +        return list(self._panels.values()) +    panels = property(_get_panels) + +    def get_panel(self, cls): +        return self._panels[cls] + +    def load_panels(self): +        """ +        Populate debug panels +        """ +        global panel_classes +        for panel_class in panel_classes: +            panel_instance = panel_class(self, context=self.template_context) +            self._panels[panel_class] = panel_instance + +    def render_toolbar(self): +        """ +        Renders the overall Toolbar with panels inside. +        """ +        context = self.template_context.copy() +        context.update({ +            'panels': self.panels, +            'toolbar_id': save_toolbar(self), +        }) +        return render_to_string('debug_toolbar/base.html', context) + + +panel_classes = [] + + +def load_panel_classes(): +    from django.conf import settings +    from django.core.exceptions import ImproperlyConfigured + +    # Check if settings has a DEBUG_TOOLBAR_PANELS, otherwise use default +    panels = getattr(settings, 'DEBUG_TOOLBAR_PANELS', ( +        'debug_toolbar.panels.version.VersionDebugPanel', +        'debug_toolbar.panels.timer.TimerDebugPanel', +        'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel', +        'debug_toolbar.panels.headers.HeaderDebugPanel', +        'debug_toolbar.panels.request_vars.RequestVarsDebugPanel', +        'debug_toolbar.panels.sql.SQLDebugPanel', +        'debug_toolbar.panels.template.TemplateDebugPanel', +        'debug_toolbar.panels.cache.CacheDebugPanel', +        'debug_toolbar.panels.signals.SignalDebugPanel', +        'debug_toolbar.panels.logger.LoggingPanel', +    )) +    for panel_path in panels: +        try: +            dot = panel_path.rindex('.') +        except ValueError: +            raise ImproperlyConfigured( +                "%s isn't a debug panel module" % panel_path) +        panel_module, panel_classname = panel_path[:dot], panel_path[dot + 1:] +        try: +            mod = import_module(panel_module) +        except ImportError as e: +            raise ImproperlyConfigured( +                'Error importing debug panel %s: "%s"' % +                (panel_module, e)) +        try: +            panel_class = getattr(mod, panel_classname) +        except AttributeError: +            raise ImproperlyConfigured( +                'Toolbar Panel module "%s" does not define a "%s" class' % +                (panel_module, panel_classname)) +        panel_classes.append(panel_class) + + +toolbar_counter = 0 +toolbar_results = SortedDict() + + +def save_toolbar(toolbar): +    global toolbar_counter, toolbar_results +    toolbar_counter += 1 +    toolbar_results[toolbar_counter] = toolbar +    for _ in range(len(toolbar_results) - CONFIG['RESULTS_CACHE_SIZE']): +        # When we drop support for Python 2.6 and switch to +        # collections.OrderedDict, use popitem(last=False). +        del toolbar_results[toolbar_results.keyOrder[0]] +    return toolbar_counter + + +def get_saved_toolbar(toolbar_id): +    return toolbar_results.get(toolbar_id) | 
