From 81dc5079638a27853f5c92254133c59956e5f28f Mon Sep 17 00:00:00 2001 From: Arthur Koziel Date: Wed, 11 Aug 2010 12:26:15 +0000 Subject: [soc2010/app-loading] store normalized version of INSTALLED_APPS in appcache git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2010/app-loading@13573 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/apps.py | 7 +++++++ tests/appcachetests/runtests.py | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/django/core/apps.py b/django/core/apps.py index 5f37d8d879..b6435fd4e8 100644 --- a/django/core/apps.py +++ b/django/core/apps.py @@ -40,6 +40,11 @@ class AppCache(object): # List of App instances app_instances = [], + # Normalized list of INSTALLED_APPS + # This stores the module name of settings.INSTALLED_APPS + # e.g. 'django.contrib.auth' for 'django.contrib.auth.AuthApp' + installed_apps = [], + # Mapping of app_labels to a dictionary of model names to model code. app_models = SortedDict(), @@ -105,11 +110,13 @@ class AppCache(object): app_instance = self.find_app(app_name) if not app_instance: if '.' in app_name: + # get the app label from the full path app_instance_name = app_name.rsplit('.', 1)[1] else: app_instance_name = app_name app_instance = app_class(app_instance_name) self.app_instances.append(app_instance) + self.installed_apps.append(app_name) # check if the app instance specifies a path to models # if not, we use the models.py file from the package dir diff --git a/tests/appcachetests/runtests.py b/tests/appcachetests/runtests.py index b9a34c4e4c..8b62e7e0dc 100644 --- a/tests/appcachetests/runtests.py +++ b/tests/appcachetests/runtests.py @@ -42,6 +42,7 @@ class AppCacheTestCase(unittest.TestCase): # because thread.RLock is un(deep)copyable cache.app_models = SortedDict() cache.app_instances = [] + cache.installed_apps = [] cache.loaded = False cache.handled = {} @@ -272,6 +273,15 @@ class LoadAppTests(AppCacheTestCase): """ self.assertRaises(ImportError, cache.load_app, 'garageland') + def test_installed_apps(self): + """ + Test that the installed_apps attribute is populated correctly + """ + settings.INSTALLED_APPS = ('model_app', 'nomodel_app.MyApp',) + # populate cache + cache.get_app_errors() + self.assertEqual(cache.installed_apps, ['model_app', 'nomodel_app',]) + class RegisterModelsTests(AppCacheTestCase): """Tests for the register_models function""" -- cgit v1.2.1