diff options
Diffstat (limited to 'debug_toolbar/settings.py')
| -rw-r--r-- | debug_toolbar/settings.py | 65 | 
1 files changed, 63 insertions, 2 deletions
| diff --git a/debug_toolbar/settings.py b/debug_toolbar/settings.py index 5ed0005..48649fd 100644 --- a/debug_toolbar/settings.py +++ b/debug_toolbar/settings.py @@ -3,6 +3,7 @@ from __future__ import absolute_import, unicode_literals  import warnings  from django.conf import settings +from django.utils.importlib import import_module  from django.utils import six @@ -75,13 +76,12 @@ PANELS_DEFAULTS = [      'debug_toolbar.panels.headers.HeadersPanel',      'debug_toolbar.panels.request.RequestPanel',      'debug_toolbar.panels.sql.SQLPanel', -    'debug_toolbar.panels.templates.TemplatesPanel',      'debug_toolbar.panels.staticfiles.StaticFilesPanel', +    'debug_toolbar.panels.templates.TemplatesPanel',      'debug_toolbar.panels.cache.CachePanel',      'debug_toolbar.panels.signals.SignalsPanel',      'debug_toolbar.panels.logging.LoggingPanel',      'debug_toolbar.panels.redirects.RedirectsPanel', -    'debug_toolbar.panels.profiling.ProfilingPanel',  ]  try: @@ -126,3 +126,64 @@ else:  PATCH_SETTINGS = getattr(settings, 'DEBUG_TOOLBAR_PATCH_SETTINGS', settings.DEBUG) + + +# The following functions can monkey-patch settings automatically. Several +# imports are placed inside functions to make it safe to import this module. + + +def is_toolbar_middleware(middleware_path): +    from debug_toolbar.middleware import DebugToolbarMiddleware +    # This could be replaced by import_by_path in Django >= 1.6. +    try: +        mod_path, cls_name = middleware_path.rsplit('.', 1) +        mod = import_module(mod_path) +        middleware_cls = getattr(mod, cls_name) +    except (AttributeError, ImportError, ValueError): +        return +    return issubclass(middleware_cls, DebugToolbarMiddleware) + + +def is_toolbar_middleware_installed(): +    return any(is_toolbar_middleware(middleware) +               for middleware in settings.MIDDLEWARE_CLASSES) + + +def prepend_to_setting(setting_name, value): +    """Insert value at the beginning of a list or tuple setting.""" +    values = getattr(settings, setting_name) +    # Make a list [value] or tuple (value,) +    value = type(values)((value,)) +    setattr(settings, setting_name, value + values) + + +def patch_internal_ips(): +    if not settings.INTERNAL_IPS: +        prepend_to_setting('INTERNAL_IPS', '127.0.0.1') +        prepend_to_setting('INTERNAL_IPS', '::1') + + +def patch_middleware_classes(): +    if not is_toolbar_middleware_installed(): +        prepend_to_setting('MIDDLEWARE_CLASSES', +                           'debug_toolbar.middleware.DebugToolbarMiddleware') + + +def patch_root_urlconf(): +    from django.conf.urls import include, patterns, url +    from django.core.urlresolvers import clear_url_caches, reverse, NoReverseMatch +    import debug_toolbar +    try: +        reverse('djdt:render_panel') +    except NoReverseMatch: +        urlconf_module = import_module(settings.ROOT_URLCONF) +        urlconf_module.urlpatterns = patterns('',                      # noqa +            url(r'^__debug__/', include(debug_toolbar.urls)), +        ) + urlconf_module.urlpatterns +        clear_url_caches() + + +def patch_all(): +    patch_internal_ips() +    patch_middleware_classes() +    patch_root_urlconf() | 
