diff options
| author | Aymeric Augustin | 2013-11-11 11:31:21 -0800 |
|---|---|---|
| committer | Aymeric Augustin | 2013-11-11 11:31:21 -0800 |
| commit | 84c336830a3b01a94e9d0e2661ccad1de4545150 (patch) | |
| tree | 1cc7893c4aadde657c92ac8744a339448b93d74a /debug_toolbar/models.py | |
| parent | c71624039d3d05067a27d6f983b552f283ffb893 (diff) | |
| parent | 334eccd578c4abcfe1e0d11a1227b37bf6553d65 (diff) | |
| download | django-debug-toolbar-84c336830a3b01a94e9d0e2661ccad1de4545150.tar.bz2 | |
Merge pull request #456 from aaugustin/automagic-setup
Simplify installation and provide more control.
Diffstat (limited to 'debug_toolbar/models.py')
| -rw-r--r-- | debug_toolbar/models.py | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/debug_toolbar/models.py b/debug_toolbar/models.py index d6b18aa..fc78874 100644 --- a/debug_toolbar/models.py +++ b/debug_toolbar/models.py @@ -1,21 +1,65 @@ from __future__ import unicode_literals from django.conf import settings +from django.conf.urls import include, patterns, url +from django.core.urlresolvers import reverse, NoReverseMatch from django.utils.importlib import import_module from debug_toolbar.toolbar.loader import load_panel_classes from debug_toolbar.middleware import DebugToolbarMiddleware -for middleware_path in settings.MIDDLEWARE_CLASSES: +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): - continue + return + return issubclass(middleware_cls, DebugToolbarMiddleware) - if issubclass(middleware_cls, DebugToolbarMiddleware): - load_panel_classes() - break + +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', namespace='djdt', app_name='djdt')), + ) + + +if settings.DEBUG: + patch_internal_ips() + patch_middleware_classes() + patch_root_urlconf() + + +if is_toolbar_middleware_installed(): + load_panel_classes() |
