mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Removed BaseAppCache.app_store.
It was only storing redundant information. This is part of the effort to allow applications without a models module.
This commit is contained in:
		| @@ -39,11 +39,8 @@ def _initialize(): | ||||
|     [shared] state of the app cache. | ||||
|     """ | ||||
|     return dict( | ||||
|         # Keys of app_store are the model modules for each application. | ||||
|         app_store=ModelDict(), | ||||
|  | ||||
|         # Mapping of installed app_labels to model modules for that app. | ||||
|         app_labels={}, | ||||
|         app_labels=OrderedDict(), | ||||
|  | ||||
|         # Mapping of app_labels to a dictionary of model names to model code. | ||||
|         # May contain apps that are not installed. | ||||
| @@ -154,9 +151,9 @@ class BaseAppCache(object): | ||||
|                     raise | ||||
|  | ||||
|         self.nesting_level -= 1 | ||||
|         if models not in self.app_store: | ||||
|             self.app_store[models] = len(self.app_store) | ||||
|             self.app_labels[self._label_for(models)] = models | ||||
|         label = self._label_for(models) | ||||
|         if label not in self.app_labels: | ||||
|             self.app_labels[label] = models | ||||
|         return models | ||||
|  | ||||
|     def app_cache_ready(self): | ||||
| @@ -174,17 +171,13 @@ class BaseAppCache(object): | ||||
|         """ | ||||
|         self._populate() | ||||
|  | ||||
|         apps = self.app_store.items() | ||||
|         # app_labels is an OrderedDict, which ensures that the returned list | ||||
|         # is always in the same order (with new apps added at the end). This | ||||
|         # avoids unstable ordering on the admin app list page, for example. | ||||
|         apps = self.app_labels.items() | ||||
|         if self.available_apps is not None: | ||||
|             apps = [elt for elt in apps | ||||
|                     if self._label_for(elt[0]) in self.available_apps] | ||||
|  | ||||
|         # Ensure the returned list is always in the same order (with new apps | ||||
|         # added at the end). This avoids unstable ordering on the admin app | ||||
|         # list page, for example. | ||||
|         apps = sorted(apps, key=lambda elt: elt[1]) | ||||
|  | ||||
|         return [elt[0] for elt in apps] | ||||
|             apps = [app for app in apps if app[0] in self.available_apps] | ||||
|         return [app[1] for app in apps] | ||||
|  | ||||
|     def _get_app_package(self, app): | ||||
|         return '.'.join(app.__name__.split('.')[:-1]) | ||||
| @@ -282,8 +275,9 @@ class BaseAppCache(object): | ||||
|             pass | ||||
|         self._populate() | ||||
|         if app_mod: | ||||
|             if app_mod in self.app_store: | ||||
|                 app_list = [self.app_models.get(self._label_for(app_mod), ModelDict())] | ||||
|             app_label = self._label_for(app_mod) | ||||
|             if app_label in self.app_labels: | ||||
|                 app_list = [self.app_models.get(app_label, ModelDict())] | ||||
|             else: | ||||
|                 app_list = [] | ||||
|         else: | ||||
|   | ||||
| @@ -20,12 +20,10 @@ class EggLoadingTest(TestCase): | ||||
|         # need to be removed in order to prevent bad interactions | ||||
|         # with the flush operation in other tests. | ||||
|         self.old_app_models = copy.deepcopy(cache.app_models) | ||||
|         self.old_app_store = copy.deepcopy(cache.app_store) | ||||
|  | ||||
|     def tearDown(self): | ||||
|         sys.path = self.old_path | ||||
|         cache.app_models = self.old_app_models | ||||
|         cache.app_store = self.old_app_store | ||||
|  | ||||
|     def test_egg1(self): | ||||
|         """Models module can be loaded from an app in an egg""" | ||||
|   | ||||
| @@ -23,11 +23,9 @@ class InvalidModelTestCase(unittest.TestCase): | ||||
|         # need to be removed in order to prevent bad interactions | ||||
|         # with the flush operation in other tests. | ||||
|         self.old_app_models = copy.deepcopy(cache.app_models) | ||||
|         self.old_app_store = copy.deepcopy(cache.app_store) | ||||
|  | ||||
|     def tearDown(self): | ||||
|         cache.app_models = self.old_app_models | ||||
|         cache.app_store = self.old_app_store | ||||
|         cache._get_models_cache = {} | ||||
|         sys.stdout = self.old_stdout | ||||
|  | ||||
|   | ||||
| @@ -115,7 +115,6 @@ class ManagersRegressionTests(TestCase): | ||||
|             # need to be removed in order to prevent bad interactions | ||||
|             # with the flush operation in other tests. | ||||
|             old_app_models = copy.deepcopy(cache.app_models) | ||||
|             old_app_store = copy.deepcopy(cache.app_store) | ||||
|  | ||||
|             class SwappableModel(models.Model): | ||||
|                 class Meta: | ||||
| @@ -131,7 +130,6 @@ class ManagersRegressionTests(TestCase): | ||||
|  | ||||
|         finally: | ||||
|             cache.app_models = old_app_models | ||||
|             cache.app_store = old_app_store | ||||
|  | ||||
|     @override_settings(TEST_SWAPPABLE_MODEL='managers_regress.Parent') | ||||
|     def test_custom_swappable_manager(self): | ||||
| @@ -140,7 +138,6 @@ class ManagersRegressionTests(TestCase): | ||||
|             # need to be removed in order to prevent bad interactions | ||||
|             # with the flush operation in other tests. | ||||
|             old_app_models = copy.deepcopy(cache.app_models) | ||||
|             old_app_store = copy.deepcopy(cache.app_store) | ||||
|  | ||||
|             class SwappableModel(models.Model): | ||||
|  | ||||
| @@ -160,7 +157,6 @@ class ManagersRegressionTests(TestCase): | ||||
|  | ||||
|         finally: | ||||
|             cache.app_models = old_app_models | ||||
|             cache.app_store = old_app_store | ||||
|  | ||||
|     @override_settings(TEST_SWAPPABLE_MODEL='managers_regress.Parent') | ||||
|     def test_explicit_swappable_manager(self): | ||||
| @@ -169,7 +165,6 @@ class ManagersRegressionTests(TestCase): | ||||
|             # need to be removed in order to prevent bad interactions | ||||
|             # with the flush operation in other tests. | ||||
|             old_app_models = copy.deepcopy(cache.app_models) | ||||
|             old_app_store = copy.deepcopy(cache.app_store) | ||||
|  | ||||
|             class SwappableModel(models.Model): | ||||
|  | ||||
| @@ -189,7 +184,6 @@ class ManagersRegressionTests(TestCase): | ||||
|  | ||||
|         finally: | ||||
|             cache.app_models = old_app_models | ||||
|             cache.app_store = old_app_store | ||||
|  | ||||
|     def test_regress_3871(self): | ||||
|         related = RelatedModel.objects.create() | ||||
|   | ||||
| @@ -133,11 +133,9 @@ class MakeMigrationsTests(MigrationTestBase): | ||||
|         self.migration_dir = os.path.join(self.test_dir, 'migrations_%d' % self.creation_counter) | ||||
|         self.migration_pkg = "migrations.migrations_%d" % self.creation_counter | ||||
|         self._old_app_models = copy.deepcopy(cache.app_models) | ||||
|         self._old_app_store = copy.deepcopy(cache.app_store) | ||||
|  | ||||
|     def tearDown(self): | ||||
|         cache.app_models = self._old_app_models | ||||
|         cache.app_store = self._old_app_store | ||||
|         cache._get_models_cache = {} | ||||
|  | ||||
|         os.chdir(self.test_dir) | ||||
|   | ||||
| @@ -2,7 +2,6 @@ | ||||
|  | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import copy | ||||
| import datetime | ||||
| import os | ||||
|  | ||||
| @@ -116,8 +115,6 @@ class WriterTests(TestCase): | ||||
|         self.assertIn("Migration", result) | ||||
|  | ||||
|     def test_migration_path(self): | ||||
|         _old_app_store = copy.deepcopy(cache.app_store) | ||||
|  | ||||
|         test_apps = [ | ||||
|             'migrations.migrations_test_apps.normal', | ||||
|             'migrations.migrations_test_apps.with_package_model', | ||||
| @@ -125,13 +122,10 @@ class WriterTests(TestCase): | ||||
|  | ||||
|         base_dir = os.path.dirname(os.path.dirname(__file__)) | ||||
|  | ||||
|         try: | ||||
|             with override_settings(INSTALLED_APPS=test_apps): | ||||
|                 for app in test_apps: | ||||
|                     cache.load_app(app) | ||||
|                     migration = migrations.Migration('0001_initial', app.split('.')[-1]) | ||||
|                     expected_path = os.path.join(base_dir, *(app.split('.') + ['migrations', '0001_initial.py'])) | ||||
|                     writer = MigrationWriter(migration) | ||||
|                     self.assertEqual(writer.path, expected_path) | ||||
|         finally: | ||||
|             cache.app_store = _old_app_store | ||||
|         with override_settings(INSTALLED_APPS=test_apps): | ||||
|             for app in test_apps: | ||||
|                 cache.load_app(app) | ||||
|                 migration = migrations.Migration('0001_initial', app.split('.')[-1]) | ||||
|                 expected_path = os.path.join(base_dir, *(app.split('.') + ['migrations', '0001_initial.py'])) | ||||
|                 writer = MigrationWriter(migration) | ||||
|                 self.assertEqual(writer.path, expected_path) | ||||
|   | ||||
| @@ -32,8 +32,6 @@ class ProxyModelInheritanceTests(TransactionTestCase): | ||||
|  | ||||
|     def tearDown(self): | ||||
|         sys.path = self.old_sys_path | ||||
|         del cache.app_store[cache.app_labels['app1']] | ||||
|         del cache.app_store[cache.app_labels['app2']] | ||||
|         del cache.app_labels['app1'] | ||||
|         del cache.app_labels['app2'] | ||||
|         del cache.app_models['app1'] | ||||
|   | ||||
| @@ -160,7 +160,6 @@ class ProxyModelTests(TestCase): | ||||
|             # need to be removed in order to prevent bad interactions | ||||
|             # with the flush operation in other tests. | ||||
|             old_app_models = copy.deepcopy(cache.app_models) | ||||
|             old_app_store = copy.deepcopy(cache.app_store) | ||||
|  | ||||
|             class SwappableModel(models.Model): | ||||
|  | ||||
| @@ -178,7 +177,6 @@ class ProxyModelTests(TestCase): | ||||
|                         proxy = True | ||||
|         finally: | ||||
|             cache.app_models = old_app_models | ||||
|             cache.app_store = old_app_store | ||||
|  | ||||
|     def test_myperson_manager(self): | ||||
|         Person.objects.create(name="fred") | ||||
|   | ||||
| @@ -29,7 +29,6 @@ class TablespacesTests(TestCase): | ||||
|         # The unmanaged models need to be removed after the test in order to | ||||
|         # prevent bad interactions with the flush operation in other tests. | ||||
|         self.old_app_models = copy.deepcopy(cache.app_models) | ||||
|         self.old_app_store = copy.deepcopy(cache.app_store) | ||||
|  | ||||
|         for model in Article, Authors, Reviewers, Scientist: | ||||
|             model._meta.managed = True | ||||
| @@ -39,7 +38,6 @@ class TablespacesTests(TestCase): | ||||
|             model._meta.managed = False | ||||
|  | ||||
|         cache.app_models = self.old_app_models | ||||
|         cache.app_store = self.old_app_store | ||||
|         cache._get_models_cache = {} | ||||
|  | ||||
|     def assertNumContains(self, haystack, needle, count): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user