diff options
| author | Aymeric Augustin | 2014-01-08 21:10:22 +0100 | 
|---|---|---|
| committer | Aymeric Augustin | 2014-01-08 21:39:05 +0100 | 
| commit | 72c101794f273435fdbeeb6da82ec3fadf99991c (patch) | |
| tree | 7164db25eb4c8c0a05acf26ecd0cdefe9c5cae25 /debug_toolbar | |
| parent | 2b1d98b0e098518171211fe98e447449f73dadf8 (diff) | |
| download | django-debug-toolbar-72c101794f273435fdbeeb6da82ec3fadf99991c.tar.bz2 | |
Move settings patching code to the settings module.
Diffstat (limited to 'debug_toolbar')
| -rw-r--r-- | debug_toolbar/models.py | 58 | ||||
| -rw-r--r-- | debug_toolbar/settings.py | 62 | 
2 files changed, 63 insertions, 57 deletions
| diff --git a/debug_toolbar/models.py b/debug_toolbar/models.py index 4e624fa..eb16e3a 100644 --- a/debug_toolbar/models.py +++ b/debug_toolbar/models.py @@ -1,63 +1,7 @@  from __future__ import absolute_import, unicode_literals -from django.conf import settings -from django.conf.urls import include, patterns, url -from django.core.urlresolvers import clear_url_caches, reverse, NoReverseMatch -from django.utils.importlib import import_module - -import debug_toolbar  from debug_toolbar import settings as dt_settings -from debug_toolbar.middleware import DebugToolbarMiddleware - - -def is_toolbar_middleware(middleware_path): -    # Replace this with 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(): -    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()  if dt_settings.PATCH_SETTINGS: -    patch_internal_ips() -    patch_middleware_classes() -    patch_root_urlconf() +    dt_settings.patch_all() diff --git a/debug_toolbar/settings.py b/debug_toolbar/settings.py index bb6a5e0..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 @@ -125,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() | 
