From c11b64c598db64d10e4d316a6fde433fc5d20aed Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Wed, 8 Jan 2014 21:32:45 +0100 Subject: Update version panel for Django 1.7. --- debug_toolbar/panels/versions.py | 65 ++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/debug_toolbar/panels/versions.py b/debug_toolbar/panels/versions.py index 321ba6e..29f165b 100644 --- a/debug_toolbar/panels/versions.py +++ b/debug_toolbar/panels/versions.py @@ -27,28 +27,49 @@ class VersionsPanel(Panel): template = 'debug_toolbar/panels/versions.html' def process_response(self, request, response): - versions = [('Python', '%d.%d.%d' % sys.version_info[:3])] - for app in list(settings.INSTALLED_APPS) + ['django']: - name = app.split('.')[-1].replace('_', ' ').capitalize() - app = import_module(app) - if hasattr(app, 'get_version'): - get_version = app.get_version - if callable(get_version): - version = get_version() - else: - version = get_version - elif hasattr(app, 'VERSION'): - version = app.VERSION - elif hasattr(app, '__version__'): - version = app.__version__ - else: - continue - if isinstance(version, (list, tuple)): - version = '.'.join(str(o) for o in version) - versions.append((name, version)) - versions = sorted(versions, key=lambda version: version[0]) - + versions = [ + ('Python', '%d.%d.%d' % sys.version_info[:3]), + ('Django', self.get_app_version(django)), + ] + if django.VERSION[:2] >= (1, 7): + versions += list(self.gen_app_versions_1_7()) + else: + versions += list(self.gen_app_versions_1_6()) self.record_stats({ - 'versions': OrderedDict(versions), + 'versions': OrderedDict(sorted(versions, key=lambda v: v[0])), 'paths': sys.path, }) + + def gen_app_versions_1_7(self): + from django.apps import apps + for app_config in apps.get_app_configs(): + name = app_config.verbose_name + app = app_config.module + version = self.get_app_version(app) + if version: + yield name, version + + def gen_app_versions_1_6(self): + for app in list(settings.INSTALLED_APPS): + name = app.split('.')[-1].replace('_', ' ').capitalize() + app = import_module(app) + version = self.get_app_version(app) + if version: + yield name, version + + def get_app_version(self, app): + if hasattr(app, 'get_version'): + get_version = app.get_version + if callable(get_version): + version = get_version() + else: + version = get_version + elif hasattr(app, 'VERSION'): + version = app.VERSION + elif hasattr(app, '__version__'): + version = app.__version__ + else: + return + if isinstance(version, (list, tuple)): + version = '.'.join(str(o) for o in version) + return version -- cgit v1.2.3