summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/core/apps.py7
-rw-r--r--tests/appcachetests/runtests.py10
2 files changed, 17 insertions, 0 deletions
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"""