From a357ed10be8eb7d9c0210a47e28b28c2653739ed Mon Sep 17 00:00:00 2001 From: Arthur Koziel Date: Sun, 15 Aug 2010 18:31:48 +0000 Subject: [soc2010/app-loading] added verbose_name to app instance and modified admin to use it git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2010/app-loading@13592 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/__init__.py | 7 ++++--- django/contrib/admin/options.py | 11 ++++++----- django/contrib/admin/sites.py | 8 +++++--- django/core/apps.py | 9 ++++++++- django/core/management/commands/syncdb.py | 3 ++- django/template/loaders/app_directories.py | 9 ++++----- 6 files changed, 29 insertions(+), 18 deletions(-) diff --git a/django/contrib/admin/__init__.py b/django/contrib/admin/__init__.py index 92886ab8d3..c9f5bc71f4 100644 --- a/django/contrib/admin/__init__.py +++ b/django/contrib/admin/__init__.py @@ -2,7 +2,7 @@ from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME from django.contrib.admin.options import ModelAdmin, HORIZONTAL, VERTICAL from django.contrib.admin.options import StackedInline, TabularInline from django.contrib.admin.sites import AdminSite, site - +from django.core.apps import cache def autodiscover(): """ @@ -16,8 +16,9 @@ def autodiscover(): from django.utils.importlib import import_module from django.utils.module_loading import module_has_submodule - for app in settings.INSTALLED_APPS: - mod = import_module(app) + for app in cache.installed_apps: + app_instance = cache.find_app(app) + mod = app_instance.module # Attempt to import the app's admin module. try: before_import_registry = copy.copy(site._registry) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 1f8ff6dbd1..abbe14c948 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -8,6 +8,7 @@ from django.contrib.admin import helpers from django.contrib.admin.util import unquote, flatten_fieldsets, get_deleted_objects, model_ngettext, model_format_dict from django.contrib import messages from django.views.decorators.csrf import csrf_protect +from django.core.apps import cache from django.core.exceptions import PermissionDenied, ValidationError from django.db import models, transaction from django.db.models.fields import BLANK_CHOICE_DASH @@ -845,7 +846,7 @@ class ModelAdmin(BaseModelAdmin): 'inline_admin_formsets': inline_admin_formsets, 'errors': helpers.AdminErrorList(form, formsets), 'root_path': self.admin_site.root_path, - 'app_label': opts.app_label, + 'app_label': cache.find_app(opts.app_label).verbose_name, } context.update(extra_context or {}) return self.render_change_form(request, context, form_url=form_url, add=True) @@ -937,7 +938,7 @@ class ModelAdmin(BaseModelAdmin): 'inline_admin_formsets': inline_admin_formsets, 'errors': helpers.AdminErrorList(form, formsets), 'root_path': self.admin_site.root_path, - 'app_label': opts.app_label, + 'app_label': cache.find_app(opts.app_label).verbose_name, } context.update(extra_context or {}) return self.render_change_form(request, context, change=True, obj=obj) @@ -1076,7 +1077,7 @@ class ModelAdmin(BaseModelAdmin): 'media': media, 'has_add_permission': self.has_add_permission(request), 'root_path': self.admin_site.root_path, - 'app_label': app_label, + 'app_label': cache.find_app(app_label).verbose_name, 'action_form': action_form, 'actions_on_top': self.actions_on_top, 'actions_on_bottom': self.actions_on_bottom, @@ -1129,7 +1130,7 @@ class ModelAdmin(BaseModelAdmin): "perms_lacking": perms_needed, "opts": opts, "root_path": self.admin_site.root_path, - "app_label": app_label, + "app_label": cache.find_app(app_label).verbose_name, } context.update(extra_context or {}) context_instance = template.RequestContext(request, current_app=self.admin_site.name) @@ -1157,7 +1158,7 @@ class ModelAdmin(BaseModelAdmin): 'module_name': capfirst(force_unicode(opts.verbose_name_plural)), 'object': obj, 'root_path': self.admin_site.root_path, - 'app_label': app_label, + 'app_label': cache.find_app(app_label).verbose_name, } context.update(extra_context or {}) context_instance = template.RequestContext(request, current_app=self.admin_site.name) diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py index 4446490451..f4b6953347 100644 --- a/django/contrib/admin/sites.py +++ b/django/contrib/admin/sites.py @@ -5,6 +5,7 @@ from django.contrib.admin import actions from django.contrib.auth import authenticate, login from django.views.decorators.csrf import csrf_protect from django.db.models.base import ModelBase +from django.core.apps import cache from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import reverse from django.shortcuts import render_to_response @@ -371,7 +372,7 @@ class AdminSite(object): app_dict[app_label]['models'].append(model_dict) else: app_dict[app_label] = { - 'name': app_label.title(), + 'name': cache.find_app(app_label).verbose_name, 'app_url': app_label + '/', 'has_module_perms': has_module_perms, 'models': [model_dict], @@ -415,6 +416,7 @@ class AdminSite(object): user = request.user has_module_perms = user.has_module_perms(app_label) app_dict = {} + app_instance = cache.find_app(app_label) for model, model_admin in self._registry.items(): if app_label == model._meta.app_label: if has_module_perms: @@ -435,7 +437,7 @@ class AdminSite(object): # something to display, add in the necessary meta # information. app_dict = { - 'name': app_label.title(), + 'name': app_instance.verbose_name, 'app_url': '', 'has_module_perms': has_module_perms, 'models': [model_dict], @@ -445,7 +447,7 @@ class AdminSite(object): # Sort the models alphabetically within each app. app_dict['models'].sort(lambda x, y: cmp(x['name'], y['name'])) context = { - 'title': _('%s administration') % capfirst(app_label), + 'title': _('%s administration') % app_instance.verbose_name, 'app_list': [app_dict], 'root_path': self.root_path, } diff --git a/django/core/apps.py b/django/core/apps.py index e59637c5dd..ae01b44e7f 100644 --- a/django/core/apps.py +++ b/django/core/apps.py @@ -3,6 +3,7 @@ from django.core.exceptions import ImproperlyConfigured from django.utils.datastructures import SortedDict from django.utils.importlib import import_module from django.utils.module_loading import module_has_submodule +from django.utils.translation import ugettext as _ import imp import sys @@ -22,9 +23,14 @@ class App(object): """ def __init__(self, name): self.name = name - # errors raised when trying to import the app + self.verbose_name = _(name.title()) + self.verbose_name_plural = _(name.title()) self.errors = [] self.models = [] + self.module = None + + def __str__(self): + return self.name def __repr__(self): return '' % self.name @@ -127,6 +133,7 @@ class AppCache(object): else: app_instance_name = app_name app_instance = app_class(app_instance_name) + app_instance.module = app_module self.app_instances.append(app_instance) self.installed_apps.append(app_name) diff --git a/django/core/management/commands/syncdb.py b/django/core/management/commands/syncdb.py index d1dd49b75e..6f1a198653 100644 --- a/django/core/management/commands/syncdb.py +++ b/django/core/management/commands/syncdb.py @@ -2,6 +2,7 @@ from optparse import make_option import sys from django.conf import settings +from django.core.apps import cache from django.core.management.base import NoArgsCommand from django.core.management.color import no_style from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal @@ -30,7 +31,7 @@ class Command(NoArgsCommand): # Import the 'management' module within each installed app, to register # dispatcher events. - for app_name in settings.INSTALLED_APPS: + for app_name in cache.installed_apps: try: import_module('.management', app_name) except ImportError, exc: diff --git a/django/template/loaders/app_directories.py b/django/template/loaders/app_directories.py index 3e05bf87f6..1fc9ec0b1a 100644 --- a/django/template/loaders/app_directories.py +++ b/django/template/loaders/app_directories.py @@ -8,6 +8,7 @@ import sys from django.conf import settings from django.core.exceptions import ImproperlyConfigured +from django.core.apps import cache from django.template import TemplateDoesNotExist from django.template.loader import BaseLoader from django.utils._os import safe_join @@ -16,11 +17,9 @@ from django.utils.importlib import import_module # At compile time, cache the directories to search. fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding() app_template_dirs = [] -for app in settings.INSTALLED_APPS: - try: - mod = import_module(app) - except ImportError, e: - raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0])) +for app in cache.installed_apps: + app_instance = cache.find_app(app) + mod = app_instance.module template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates') if os.path.isdir(template_dir): app_template_dirs.append(template_dir.decode(fs_encoding)) -- cgit v1.2.1