Complained on override_settings(INSTALLED_APPS=...).

Currently such overrides aren't reflected in the app cache.

It would  be possible to handle them. But that doesn't look like a very
good API. It makes it complicated to express "add this app" and "remove
this app", which are the most common operations on INSTALLED_APPS.
This commit is contained in:
Aymeric Augustin 2013-12-20 10:44:32 +01:00
parent 16aae35ca8
commit 517c24bcfa
2 changed files with 9 additions and 6 deletions

View File

@ -17,7 +17,7 @@ setting_changed = Signal(providing_args=["setting", "value", "enter"])
# except for cases where the receiver is related to a contrib app. # except for cases where the receiver is related to a contrib app.
# Settings that may not work well when using 'override_settings' (#19031) # Settings that may not work well when using 'override_settings' (#19031)
COMPLEX_OVERRIDE_SETTINGS = set(['DATABASES']) COMPLEX_OVERRIDE_SETTINGS = set(['DATABASES', 'INSTALLED_APPS'])
@receiver(setting_changed) @receiver(setting_changed)

View File

@ -3,6 +3,7 @@ from __future__ import unicode_literals
import os import os
import sys import sys
from unittest import TestCase from unittest import TestCase
import warnings
from django.core.apps import app_cache from django.core.apps import app_cache
from django.core.apps.cache import AppCache from django.core.apps.cache import AppCache
@ -77,11 +78,13 @@ class EggLoadingTest(TestCase):
# Pretend we're the master app cache to test the population process. # Pretend we're the master app cache to test the population process.
app_cache._apps_loaded = False app_cache._apps_loaded = False
app_cache._models_loaded = False app_cache._models_loaded = False
with override_settings(INSTALLED_APPS=('notexists',)): with warnings.catch_warnings():
with self.assertRaises(ImportError): warnings.filterwarnings("ignore", "Overriding setting INSTALLED_APPS")
app_cache.get_model('notexists', 'nomodel') with override_settings(INSTALLED_APPS=['notexists']):
with self.assertRaises(ImportError): with self.assertRaises(ImportError):
app_cache.get_model('notexists', 'nomodel') app_cache.get_model('notexists', 'nomodel')
with self.assertRaises(ImportError):
app_cache.get_model('notexists', 'nomodel')
class GetModelsTest(TestCase): class GetModelsTest(TestCase):