mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Refs #33476 -- Reformatted code with Black.
This commit is contained in:
committed by
Mariusz Felisiak
parent
f68fa8b45d
commit
9c19aff7c7
@@ -5,99 +5,109 @@ from types import ModuleType, SimpleNamespace
|
||||
from unittest import mock
|
||||
|
||||
from django.conf import (
|
||||
ENVIRONMENT_VARIABLE, USE_DEPRECATED_PYTZ_DEPRECATED_MSG, LazySettings,
|
||||
Settings, settings,
|
||||
ENVIRONMENT_VARIABLE,
|
||||
USE_DEPRECATED_PYTZ_DEPRECATED_MSG,
|
||||
LazySettings,
|
||||
Settings,
|
||||
settings,
|
||||
)
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.http import HttpRequest
|
||||
from django.test import (
|
||||
SimpleTestCase, TestCase, TransactionTestCase, modify_settings,
|
||||
override_settings, signals,
|
||||
SimpleTestCase,
|
||||
TestCase,
|
||||
TransactionTestCase,
|
||||
modify_settings,
|
||||
override_settings,
|
||||
signals,
|
||||
)
|
||||
from django.test.utils import requires_tz_support
|
||||
from django.urls import clear_script_prefix, set_script_prefix
|
||||
from django.utils.deprecation import RemovedInDjango50Warning
|
||||
|
||||
|
||||
@modify_settings(ITEMS={
|
||||
'prepend': ['b'],
|
||||
'append': ['d'],
|
||||
'remove': ['a', 'e']
|
||||
})
|
||||
@override_settings(ITEMS=['a', 'c', 'e'], ITEMS_OUTER=[1, 2, 3], TEST='override', TEST_OUTER='outer')
|
||||
@modify_settings(ITEMS={"prepend": ["b"], "append": ["d"], "remove": ["a", "e"]})
|
||||
@override_settings(
|
||||
ITEMS=["a", "c", "e"], ITEMS_OUTER=[1, 2, 3], TEST="override", TEST_OUTER="outer"
|
||||
)
|
||||
class FullyDecoratedTranTestCase(TransactionTestCase):
|
||||
|
||||
available_apps = []
|
||||
|
||||
def test_override(self):
|
||||
self.assertEqual(settings.ITEMS, ['b', 'c', 'd'])
|
||||
self.assertEqual(settings.ITEMS, ["b", "c", "d"])
|
||||
self.assertEqual(settings.ITEMS_OUTER, [1, 2, 3])
|
||||
self.assertEqual(settings.TEST, 'override')
|
||||
self.assertEqual(settings.TEST_OUTER, 'outer')
|
||||
self.assertEqual(settings.TEST, "override")
|
||||
self.assertEqual(settings.TEST_OUTER, "outer")
|
||||
|
||||
@modify_settings(ITEMS={
|
||||
'append': ['e', 'f'],
|
||||
'prepend': ['a'],
|
||||
'remove': ['d', 'c'],
|
||||
})
|
||||
@modify_settings(
|
||||
ITEMS={
|
||||
"append": ["e", "f"],
|
||||
"prepend": ["a"],
|
||||
"remove": ["d", "c"],
|
||||
}
|
||||
)
|
||||
def test_method_list_override(self):
|
||||
self.assertEqual(settings.ITEMS, ['a', 'b', 'e', 'f'])
|
||||
self.assertEqual(settings.ITEMS, ["a", "b", "e", "f"])
|
||||
self.assertEqual(settings.ITEMS_OUTER, [1, 2, 3])
|
||||
|
||||
@modify_settings(ITEMS={
|
||||
'append': ['b'],
|
||||
'prepend': ['d'],
|
||||
'remove': ['a', 'c', 'e'],
|
||||
})
|
||||
@modify_settings(
|
||||
ITEMS={
|
||||
"append": ["b"],
|
||||
"prepend": ["d"],
|
||||
"remove": ["a", "c", "e"],
|
||||
}
|
||||
)
|
||||
def test_method_list_override_no_ops(self):
|
||||
self.assertEqual(settings.ITEMS, ['b', 'd'])
|
||||
self.assertEqual(settings.ITEMS, ["b", "d"])
|
||||
|
||||
@modify_settings(ITEMS={
|
||||
'append': 'e',
|
||||
'prepend': 'a',
|
||||
'remove': 'c',
|
||||
})
|
||||
@modify_settings(
|
||||
ITEMS={
|
||||
"append": "e",
|
||||
"prepend": "a",
|
||||
"remove": "c",
|
||||
}
|
||||
)
|
||||
def test_method_list_override_strings(self):
|
||||
self.assertEqual(settings.ITEMS, ['a', 'b', 'd', 'e'])
|
||||
self.assertEqual(settings.ITEMS, ["a", "b", "d", "e"])
|
||||
|
||||
@modify_settings(ITEMS={'remove': ['b', 'd']})
|
||||
@modify_settings(ITEMS={'append': ['b'], 'prepend': ['d']})
|
||||
@modify_settings(ITEMS={"remove": ["b", "d"]})
|
||||
@modify_settings(ITEMS={"append": ["b"], "prepend": ["d"]})
|
||||
def test_method_list_override_nested_order(self):
|
||||
self.assertEqual(settings.ITEMS, ['d', 'c', 'b'])
|
||||
self.assertEqual(settings.ITEMS, ["d", "c", "b"])
|
||||
|
||||
@override_settings(TEST='override2')
|
||||
@override_settings(TEST="override2")
|
||||
def test_method_override(self):
|
||||
self.assertEqual(settings.TEST, 'override2')
|
||||
self.assertEqual(settings.TEST_OUTER, 'outer')
|
||||
self.assertEqual(settings.TEST, "override2")
|
||||
self.assertEqual(settings.TEST_OUTER, "outer")
|
||||
|
||||
def test_decorated_testcase_name(self):
|
||||
self.assertEqual(FullyDecoratedTranTestCase.__name__, 'FullyDecoratedTranTestCase')
|
||||
self.assertEqual(
|
||||
FullyDecoratedTranTestCase.__name__, "FullyDecoratedTranTestCase"
|
||||
)
|
||||
|
||||
def test_decorated_testcase_module(self):
|
||||
self.assertEqual(FullyDecoratedTranTestCase.__module__, __name__)
|
||||
|
||||
|
||||
@modify_settings(ITEMS={
|
||||
'prepend': ['b'],
|
||||
'append': ['d'],
|
||||
'remove': ['a', 'e']
|
||||
})
|
||||
@override_settings(ITEMS=['a', 'c', 'e'], TEST='override')
|
||||
@modify_settings(ITEMS={"prepend": ["b"], "append": ["d"], "remove": ["a", "e"]})
|
||||
@override_settings(ITEMS=["a", "c", "e"], TEST="override")
|
||||
class FullyDecoratedTestCase(TestCase):
|
||||
|
||||
def test_override(self):
|
||||
self.assertEqual(settings.ITEMS, ['b', 'c', 'd'])
|
||||
self.assertEqual(settings.TEST, 'override')
|
||||
self.assertEqual(settings.ITEMS, ["b", "c", "d"])
|
||||
self.assertEqual(settings.TEST, "override")
|
||||
|
||||
@modify_settings(ITEMS={
|
||||
'append': 'e',
|
||||
'prepend': 'a',
|
||||
'remove': 'c',
|
||||
})
|
||||
@override_settings(TEST='override2')
|
||||
@modify_settings(
|
||||
ITEMS={
|
||||
"append": "e",
|
||||
"prepend": "a",
|
||||
"remove": "c",
|
||||
}
|
||||
)
|
||||
@override_settings(TEST="override2")
|
||||
def test_method_override(self):
|
||||
self.assertEqual(settings.ITEMS, ['a', 'b', 'd', 'e'])
|
||||
self.assertEqual(settings.TEST, 'override2')
|
||||
self.assertEqual(settings.ITEMS, ["a", "b", "d", "e"])
|
||||
self.assertEqual(settings.TEST, "override2")
|
||||
|
||||
|
||||
class ClassDecoratedTestCaseSuper(TestCase):
|
||||
@@ -105,28 +115,28 @@ class ClassDecoratedTestCaseSuper(TestCase):
|
||||
Dummy class for testing max recursion error in child class call to
|
||||
super(). Refs #17011.
|
||||
"""
|
||||
|
||||
def test_max_recursion_error(self):
|
||||
pass
|
||||
|
||||
|
||||
@override_settings(TEST='override')
|
||||
@override_settings(TEST="override")
|
||||
class ClassDecoratedTestCase(ClassDecoratedTestCaseSuper):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.foo = getattr(settings, 'TEST', 'BUG')
|
||||
cls.foo = getattr(settings, "TEST", "BUG")
|
||||
|
||||
def test_override(self):
|
||||
self.assertEqual(settings.TEST, 'override')
|
||||
self.assertEqual(settings.TEST, "override")
|
||||
|
||||
def test_setupclass_override(self):
|
||||
"""Settings are overridden within setUpClass (#21281)."""
|
||||
self.assertEqual(self.foo, 'override')
|
||||
self.assertEqual(self.foo, "override")
|
||||
|
||||
@override_settings(TEST='override2')
|
||||
@override_settings(TEST="override2")
|
||||
def test_method_override(self):
|
||||
self.assertEqual(settings.TEST, 'override2')
|
||||
self.assertEqual(settings.TEST, "override2")
|
||||
|
||||
def test_max_recursion_error(self):
|
||||
"""
|
||||
@@ -136,18 +146,18 @@ class ClassDecoratedTestCase(ClassDecoratedTestCaseSuper):
|
||||
super().test_max_recursion_error()
|
||||
|
||||
|
||||
@modify_settings(ITEMS={'append': 'mother'})
|
||||
@override_settings(ITEMS=['father'], TEST='override-parent')
|
||||
@modify_settings(ITEMS={"append": "mother"})
|
||||
@override_settings(ITEMS=["father"], TEST="override-parent")
|
||||
class ParentDecoratedTestCase(TestCase):
|
||||
pass
|
||||
|
||||
|
||||
@modify_settings(ITEMS={'append': ['child']})
|
||||
@override_settings(TEST='override-child')
|
||||
@modify_settings(ITEMS={"append": ["child"]})
|
||||
@override_settings(TEST="override-child")
|
||||
class ChildDecoratedTestCase(ParentDecoratedTestCase):
|
||||
def test_override_settings_inheritance(self):
|
||||
self.assertEqual(settings.ITEMS, ['father', 'mother', 'child'])
|
||||
self.assertEqual(settings.TEST, 'override-child')
|
||||
self.assertEqual(settings.ITEMS, ["father", "mother", "child"])
|
||||
self.assertEqual(settings.TEST, "override-child")
|
||||
|
||||
|
||||
class SettingsTests(SimpleTestCase):
|
||||
@@ -159,50 +169,50 @@ class SettingsTests(SimpleTestCase):
|
||||
signals.setting_changed.disconnect(self.signal_callback)
|
||||
|
||||
def signal_callback(self, sender, setting, value, **kwargs):
|
||||
if setting == 'TEST':
|
||||
if setting == "TEST":
|
||||
self.testvalue = value
|
||||
|
||||
def test_override(self):
|
||||
settings.TEST = 'test'
|
||||
self.assertEqual('test', settings.TEST)
|
||||
with self.settings(TEST='override'):
|
||||
self.assertEqual('override', settings.TEST)
|
||||
self.assertEqual('test', settings.TEST)
|
||||
settings.TEST = "test"
|
||||
self.assertEqual("test", settings.TEST)
|
||||
with self.settings(TEST="override"):
|
||||
self.assertEqual("override", settings.TEST)
|
||||
self.assertEqual("test", settings.TEST)
|
||||
del settings.TEST
|
||||
|
||||
def test_override_change(self):
|
||||
settings.TEST = 'test'
|
||||
self.assertEqual('test', settings.TEST)
|
||||
with self.settings(TEST='override'):
|
||||
self.assertEqual('override', settings.TEST)
|
||||
settings.TEST = 'test2'
|
||||
self.assertEqual('test', settings.TEST)
|
||||
settings.TEST = "test"
|
||||
self.assertEqual("test", settings.TEST)
|
||||
with self.settings(TEST="override"):
|
||||
self.assertEqual("override", settings.TEST)
|
||||
settings.TEST = "test2"
|
||||
self.assertEqual("test", settings.TEST)
|
||||
del settings.TEST
|
||||
|
||||
def test_override_doesnt_leak(self):
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST')
|
||||
with self.settings(TEST='override'):
|
||||
self.assertEqual('override', settings.TEST)
|
||||
settings.TEST = 'test'
|
||||
getattr(settings, "TEST")
|
||||
with self.settings(TEST="override"):
|
||||
self.assertEqual("override", settings.TEST)
|
||||
settings.TEST = "test"
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST')
|
||||
getattr(settings, "TEST")
|
||||
|
||||
@override_settings(TEST='override')
|
||||
@override_settings(TEST="override")
|
||||
def test_decorator(self):
|
||||
self.assertEqual('override', settings.TEST)
|
||||
self.assertEqual("override", settings.TEST)
|
||||
|
||||
def test_context_manager(self):
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST')
|
||||
override = override_settings(TEST='override')
|
||||
getattr(settings, "TEST")
|
||||
override = override_settings(TEST="override")
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST')
|
||||
getattr(settings, "TEST")
|
||||
override.enable()
|
||||
self.assertEqual('override', settings.TEST)
|
||||
self.assertEqual("override", settings.TEST)
|
||||
override.disable()
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST')
|
||||
getattr(settings, "TEST")
|
||||
|
||||
def test_class_decorator(self):
|
||||
# SimpleTestCase can be decorated by override_settings, but not ut.TestCase
|
||||
@@ -212,39 +222,41 @@ class SettingsTests(SimpleTestCase):
|
||||
class UnittestTestCaseSubclass(unittest.TestCase):
|
||||
pass
|
||||
|
||||
decorated = override_settings(TEST='override')(SimpleTestCaseSubclass)
|
||||
decorated = override_settings(TEST="override")(SimpleTestCaseSubclass)
|
||||
self.assertIsInstance(decorated, type)
|
||||
self.assertTrue(issubclass(decorated, SimpleTestCase))
|
||||
|
||||
with self.assertRaisesMessage(Exception, "Only subclasses of Django SimpleTestCase"):
|
||||
decorated = override_settings(TEST='override')(UnittestTestCaseSubclass)
|
||||
with self.assertRaisesMessage(
|
||||
Exception, "Only subclasses of Django SimpleTestCase"
|
||||
):
|
||||
decorated = override_settings(TEST="override")(UnittestTestCaseSubclass)
|
||||
|
||||
def test_signal_callback_context_manager(self):
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST')
|
||||
with self.settings(TEST='override'):
|
||||
self.assertEqual(self.testvalue, 'override')
|
||||
getattr(settings, "TEST")
|
||||
with self.settings(TEST="override"):
|
||||
self.assertEqual(self.testvalue, "override")
|
||||
self.assertIsNone(self.testvalue)
|
||||
|
||||
@override_settings(TEST='override')
|
||||
@override_settings(TEST="override")
|
||||
def test_signal_callback_decorator(self):
|
||||
self.assertEqual(self.testvalue, 'override')
|
||||
self.assertEqual(self.testvalue, "override")
|
||||
|
||||
#
|
||||
# Regression tests for #10130: deleting settings.
|
||||
#
|
||||
|
||||
def test_settings_delete(self):
|
||||
settings.TEST = 'test'
|
||||
self.assertEqual('test', settings.TEST)
|
||||
settings.TEST = "test"
|
||||
self.assertEqual("test", settings.TEST)
|
||||
del settings.TEST
|
||||
msg = "'Settings' object has no attribute 'TEST'"
|
||||
with self.assertRaisesMessage(AttributeError, msg):
|
||||
getattr(settings, 'TEST')
|
||||
getattr(settings, "TEST")
|
||||
|
||||
def test_settings_delete_wrapped(self):
|
||||
with self.assertRaisesMessage(TypeError, "can't delete _wrapped."):
|
||||
delattr(settings, '_wrapped')
|
||||
delattr(settings, "_wrapped")
|
||||
|
||||
def test_override_settings_delete(self):
|
||||
"""
|
||||
@@ -255,13 +267,13 @@ class SettingsTests(SimpleTestCase):
|
||||
with self.settings(USE_I18N=False):
|
||||
del settings.USE_I18N
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'USE_I18N')
|
||||
getattr(settings, "USE_I18N")
|
||||
# Should also work for a non-overridden setting
|
||||
del settings.USE_TZ
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'USE_TZ')
|
||||
self.assertNotIn('USE_I18N', dir(settings))
|
||||
self.assertNotIn('USE_TZ', dir(settings))
|
||||
getattr(settings, "USE_TZ")
|
||||
self.assertNotIn("USE_I18N", dir(settings))
|
||||
self.assertNotIn("USE_TZ", dir(settings))
|
||||
self.assertEqual(settings.USE_I18N, previous_i18n)
|
||||
self.assertEqual(settings.USE_TZ, previous_tz)
|
||||
|
||||
@@ -272,184 +284,187 @@ class SettingsTests(SimpleTestCase):
|
||||
"""
|
||||
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST')
|
||||
getattr(settings, "TEST")
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST2')
|
||||
getattr(settings, "TEST2")
|
||||
|
||||
inner = override_settings(TEST2='override')
|
||||
with override_settings(TEST='override'):
|
||||
self.assertEqual('override', settings.TEST)
|
||||
inner = override_settings(TEST2="override")
|
||||
with override_settings(TEST="override"):
|
||||
self.assertEqual("override", settings.TEST)
|
||||
with inner:
|
||||
self.assertEqual('override', settings.TEST)
|
||||
self.assertEqual('override', settings.TEST2)
|
||||
self.assertEqual("override", settings.TEST)
|
||||
self.assertEqual("override", settings.TEST2)
|
||||
# inner's __exit__ should have restored the settings of the outer
|
||||
# context manager, not those when the class was instantiated
|
||||
self.assertEqual('override', settings.TEST)
|
||||
self.assertEqual("override", settings.TEST)
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST2')
|
||||
getattr(settings, "TEST2")
|
||||
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST')
|
||||
getattr(settings, "TEST")
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(settings, 'TEST2')
|
||||
getattr(settings, "TEST2")
|
||||
|
||||
@override_settings(SECRET_KEY='')
|
||||
@override_settings(SECRET_KEY="")
|
||||
def test_no_secret_key(self):
|
||||
msg = 'The SECRET_KEY setting must not be empty.'
|
||||
msg = "The SECRET_KEY setting must not be empty."
|
||||
with self.assertRaisesMessage(ImproperlyConfigured, msg):
|
||||
settings.SECRET_KEY
|
||||
|
||||
def test_no_settings_module(self):
|
||||
msg = (
|
||||
'Requested setting%s, but settings are not configured. You '
|
||||
'must either define the environment variable DJANGO_SETTINGS_MODULE '
|
||||
'or call settings.configure() before accessing settings.'
|
||||
"Requested setting%s, but settings are not configured. You "
|
||||
"must either define the environment variable DJANGO_SETTINGS_MODULE "
|
||||
"or call settings.configure() before accessing settings."
|
||||
)
|
||||
orig_settings = os.environ[ENVIRONMENT_VARIABLE]
|
||||
os.environ[ENVIRONMENT_VARIABLE] = ''
|
||||
os.environ[ENVIRONMENT_VARIABLE] = ""
|
||||
try:
|
||||
with self.assertRaisesMessage(ImproperlyConfigured, msg % 's'):
|
||||
with self.assertRaisesMessage(ImproperlyConfigured, msg % "s"):
|
||||
settings._setup()
|
||||
with self.assertRaisesMessage(ImproperlyConfigured, msg % ' TEST'):
|
||||
settings._setup('TEST')
|
||||
with self.assertRaisesMessage(ImproperlyConfigured, msg % " TEST"):
|
||||
settings._setup("TEST")
|
||||
finally:
|
||||
os.environ[ENVIRONMENT_VARIABLE] = orig_settings
|
||||
|
||||
def test_already_configured(self):
|
||||
with self.assertRaisesMessage(RuntimeError, 'Settings already configured.'):
|
||||
with self.assertRaisesMessage(RuntimeError, "Settings already configured."):
|
||||
settings.configure()
|
||||
|
||||
def test_nonupper_settings_prohibited_in_configure(self):
|
||||
s = LazySettings()
|
||||
with self.assertRaisesMessage(TypeError, "Setting 'foo' must be uppercase."):
|
||||
s.configure(foo='bar')
|
||||
s.configure(foo="bar")
|
||||
|
||||
def test_nonupper_settings_ignored_in_default_settings(self):
|
||||
s = LazySettings()
|
||||
s.configure(SimpleNamespace(foo='bar'))
|
||||
s.configure(SimpleNamespace(foo="bar"))
|
||||
with self.assertRaises(AttributeError):
|
||||
getattr(s, 'foo')
|
||||
getattr(s, "foo")
|
||||
|
||||
@requires_tz_support
|
||||
@mock.patch('django.conf.global_settings.TIME_ZONE', 'test')
|
||||
@mock.patch("django.conf.global_settings.TIME_ZONE", "test")
|
||||
def test_incorrect_timezone(self):
|
||||
with self.assertRaisesMessage(ValueError, 'Incorrect timezone setting: test'):
|
||||
with self.assertRaisesMessage(ValueError, "Incorrect timezone setting: test"):
|
||||
settings._setup()
|
||||
|
||||
def test_use_tz_false_deprecation(self):
|
||||
settings_module = ModuleType('fake_settings_module')
|
||||
settings_module.SECRET_KEY = 'foo'
|
||||
sys.modules['fake_settings_module'] = settings_module
|
||||
settings_module = ModuleType("fake_settings_module")
|
||||
settings_module.SECRET_KEY = "foo"
|
||||
sys.modules["fake_settings_module"] = settings_module
|
||||
msg = (
|
||||
'The default value of USE_TZ will change from False to True in '
|
||||
'Django 5.0. Set USE_TZ to False in your project settings if you '
|
||||
'want to keep the current default behavior.'
|
||||
"The default value of USE_TZ will change from False to True in "
|
||||
"Django 5.0. Set USE_TZ to False in your project settings if you "
|
||||
"want to keep the current default behavior."
|
||||
)
|
||||
try:
|
||||
with self.assertRaisesMessage(RemovedInDjango50Warning, msg):
|
||||
Settings('fake_settings_module')
|
||||
Settings("fake_settings_module")
|
||||
finally:
|
||||
del sys.modules['fake_settings_module']
|
||||
del sys.modules["fake_settings_module"]
|
||||
|
||||
def test_use_deprecated_pytz_deprecation(self):
|
||||
settings_module = ModuleType('fake_settings_module')
|
||||
settings_module = ModuleType("fake_settings_module")
|
||||
settings_module.USE_DEPRECATED_PYTZ = True
|
||||
settings_module.USE_TZ = True
|
||||
sys.modules['fake_settings_module'] = settings_module
|
||||
sys.modules["fake_settings_module"] = settings_module
|
||||
try:
|
||||
with self.assertRaisesMessage(RemovedInDjango50Warning, USE_DEPRECATED_PYTZ_DEPRECATED_MSG):
|
||||
Settings('fake_settings_module')
|
||||
with self.assertRaisesMessage(
|
||||
RemovedInDjango50Warning, USE_DEPRECATED_PYTZ_DEPRECATED_MSG
|
||||
):
|
||||
Settings("fake_settings_module")
|
||||
finally:
|
||||
del sys.modules['fake_settings_module']
|
||||
del sys.modules["fake_settings_module"]
|
||||
|
||||
holder = LazySettings()
|
||||
with self.assertRaisesMessage(RemovedInDjango50Warning, USE_DEPRECATED_PYTZ_DEPRECATED_MSG):
|
||||
with self.assertRaisesMessage(
|
||||
RemovedInDjango50Warning, USE_DEPRECATED_PYTZ_DEPRECATED_MSG
|
||||
):
|
||||
holder.configure(USE_DEPRECATED_PYTZ=True)
|
||||
|
||||
|
||||
class TestComplexSettingOverride(SimpleTestCase):
|
||||
def setUp(self):
|
||||
self.old_warn_override_settings = signals.COMPLEX_OVERRIDE_SETTINGS.copy()
|
||||
signals.COMPLEX_OVERRIDE_SETTINGS.add('TEST_WARN')
|
||||
signals.COMPLEX_OVERRIDE_SETTINGS.add("TEST_WARN")
|
||||
|
||||
def tearDown(self):
|
||||
signals.COMPLEX_OVERRIDE_SETTINGS = self.old_warn_override_settings
|
||||
self.assertNotIn('TEST_WARN', signals.COMPLEX_OVERRIDE_SETTINGS)
|
||||
self.assertNotIn("TEST_WARN", signals.COMPLEX_OVERRIDE_SETTINGS)
|
||||
|
||||
def test_complex_override_warning(self):
|
||||
"""Regression test for #19031"""
|
||||
msg = 'Overriding setting TEST_WARN can lead to unexpected behavior.'
|
||||
msg = "Overriding setting TEST_WARN can lead to unexpected behavior."
|
||||
with self.assertWarnsMessage(UserWarning, msg) as cm:
|
||||
with override_settings(TEST_WARN='override'):
|
||||
self.assertEqual(settings.TEST_WARN, 'override')
|
||||
with override_settings(TEST_WARN="override"):
|
||||
self.assertEqual(settings.TEST_WARN, "override")
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
|
||||
class SecureProxySslHeaderTest(SimpleTestCase):
|
||||
|
||||
@override_settings(SECURE_PROXY_SSL_HEADER=None)
|
||||
def test_none(self):
|
||||
req = HttpRequest()
|
||||
self.assertIs(req.is_secure(), False)
|
||||
|
||||
@override_settings(SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO', 'https'))
|
||||
@override_settings(SECURE_PROXY_SSL_HEADER=("HTTP_X_FORWARDED_PROTO", "https"))
|
||||
def test_set_without_xheader(self):
|
||||
req = HttpRequest()
|
||||
self.assertIs(req.is_secure(), False)
|
||||
|
||||
@override_settings(SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO', 'https'))
|
||||
@override_settings(SECURE_PROXY_SSL_HEADER=("HTTP_X_FORWARDED_PROTO", "https"))
|
||||
def test_set_with_xheader_wrong(self):
|
||||
req = HttpRequest()
|
||||
req.META['HTTP_X_FORWARDED_PROTO'] = 'wrongvalue'
|
||||
req.META["HTTP_X_FORWARDED_PROTO"] = "wrongvalue"
|
||||
self.assertIs(req.is_secure(), False)
|
||||
|
||||
@override_settings(SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO', 'https'))
|
||||
@override_settings(SECURE_PROXY_SSL_HEADER=("HTTP_X_FORWARDED_PROTO", "https"))
|
||||
def test_set_with_xheader_right(self):
|
||||
req = HttpRequest()
|
||||
req.META['HTTP_X_FORWARDED_PROTO'] = 'https'
|
||||
req.META["HTTP_X_FORWARDED_PROTO"] = "https"
|
||||
self.assertIs(req.is_secure(), True)
|
||||
|
||||
@override_settings(SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO', 'https'))
|
||||
@override_settings(SECURE_PROXY_SSL_HEADER=("HTTP_X_FORWARDED_PROTO", "https"))
|
||||
def test_xheader_preferred_to_underlying_request(self):
|
||||
class ProxyRequest(HttpRequest):
|
||||
def _get_scheme(self):
|
||||
"""Proxy always connecting via HTTPS"""
|
||||
return 'https'
|
||||
return "https"
|
||||
|
||||
# Client connects via HTTP.
|
||||
req = ProxyRequest()
|
||||
req.META['HTTP_X_FORWARDED_PROTO'] = 'http'
|
||||
req.META["HTTP_X_FORWARDED_PROTO"] = "http"
|
||||
self.assertIs(req.is_secure(), False)
|
||||
|
||||
|
||||
class IsOverriddenTest(SimpleTestCase):
|
||||
def test_configure(self):
|
||||
s = LazySettings()
|
||||
s.configure(SECRET_KEY='foo')
|
||||
s.configure(SECRET_KEY="foo")
|
||||
|
||||
self.assertTrue(s.is_overridden('SECRET_KEY'))
|
||||
self.assertTrue(s.is_overridden("SECRET_KEY"))
|
||||
|
||||
def test_module(self):
|
||||
settings_module = ModuleType('fake_settings_module')
|
||||
settings_module.SECRET_KEY = 'foo'
|
||||
settings_module = ModuleType("fake_settings_module")
|
||||
settings_module.SECRET_KEY = "foo"
|
||||
settings_module.USE_TZ = False
|
||||
sys.modules['fake_settings_module'] = settings_module
|
||||
sys.modules["fake_settings_module"] = settings_module
|
||||
try:
|
||||
s = Settings('fake_settings_module')
|
||||
s = Settings("fake_settings_module")
|
||||
|
||||
self.assertTrue(s.is_overridden('SECRET_KEY'))
|
||||
self.assertFalse(s.is_overridden('ALLOWED_HOSTS'))
|
||||
self.assertTrue(s.is_overridden("SECRET_KEY"))
|
||||
self.assertFalse(s.is_overridden("ALLOWED_HOSTS"))
|
||||
finally:
|
||||
del sys.modules['fake_settings_module']
|
||||
del sys.modules["fake_settings_module"]
|
||||
|
||||
def test_override(self):
|
||||
self.assertFalse(settings.is_overridden('ALLOWED_HOSTS'))
|
||||
self.assertFalse(settings.is_overridden("ALLOWED_HOSTS"))
|
||||
with override_settings(ALLOWED_HOSTS=[]):
|
||||
self.assertTrue(settings.is_overridden('ALLOWED_HOSTS'))
|
||||
self.assertTrue(settings.is_overridden("ALLOWED_HOSTS"))
|
||||
|
||||
def test_unevaluated_lazysettings_repr(self):
|
||||
lazy_settings = LazySettings()
|
||||
expected = '<LazySettings [Unevaluated]>'
|
||||
expected = "<LazySettings [Unevaluated]>"
|
||||
self.assertEqual(repr(lazy_settings), expected)
|
||||
|
||||
def test_evaluated_lazysettings_repr(self):
|
||||
@@ -463,7 +478,7 @@ class IsOverriddenTest(SimpleTestCase):
|
||||
def test_usersettingsholder_repr(self):
|
||||
lazy_settings = LazySettings()
|
||||
lazy_settings.configure(APPEND_SLASH=False)
|
||||
expected = '<UserSettingsHolder>'
|
||||
expected = "<UserSettingsHolder>"
|
||||
self.assertEqual(repr(lazy_settings._wrapped), expected)
|
||||
|
||||
def test_settings_repr(self):
|
||||
@@ -478,8 +493,9 @@ class TestListSettings(SimpleTestCase):
|
||||
Make sure settings that should be lists or tuples throw
|
||||
ImproperlyConfigured if they are set to a string instead of a list or tuple.
|
||||
"""
|
||||
|
||||
list_or_tuple_settings = (
|
||||
'ALLOWED_HOSTS',
|
||||
"ALLOWED_HOSTS",
|
||||
"INSTALLED_APPS",
|
||||
"TEMPLATE_DIRS",
|
||||
"LOCALE_PATHS",
|
||||
@@ -487,17 +503,17 @@ class TestListSettings(SimpleTestCase):
|
||||
)
|
||||
|
||||
def test_tuple_settings(self):
|
||||
settings_module = ModuleType('fake_settings_module')
|
||||
settings_module.SECRET_KEY = 'foo'
|
||||
msg = 'The %s setting must be a list or a tuple.'
|
||||
settings_module = ModuleType("fake_settings_module")
|
||||
settings_module.SECRET_KEY = "foo"
|
||||
msg = "The %s setting must be a list or a tuple."
|
||||
for setting in self.list_or_tuple_settings:
|
||||
setattr(settings_module, setting, ('non_list_or_tuple_value'))
|
||||
sys.modules['fake_settings_module'] = settings_module
|
||||
setattr(settings_module, setting, ("non_list_or_tuple_value"))
|
||||
sys.modules["fake_settings_module"] = settings_module
|
||||
try:
|
||||
with self.assertRaisesMessage(ImproperlyConfigured, msg % setting):
|
||||
Settings('fake_settings_module')
|
||||
Settings("fake_settings_module")
|
||||
finally:
|
||||
del sys.modules['fake_settings_module']
|
||||
del sys.modules["fake_settings_module"]
|
||||
delattr(settings_module, setting)
|
||||
|
||||
|
||||
@@ -516,6 +532,7 @@ class OverrideSettingsIsolationOnExceptionTests(SimpleTestCase):
|
||||
receiver failure detailed in receiver(). In each case, ALL receivers are
|
||||
called when exiting the context manager.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
signals.setting_changed.connect(self.receiver)
|
||||
self.addCleanup(signals.setting_changed.disconnect, self.receiver)
|
||||
@@ -533,19 +550,19 @@ class OverrideSettingsIsolationOnExceptionTests(SimpleTestCase):
|
||||
- SETTING_ENTER raises an error only on enter.
|
||||
- SETTING_EXIT raises an error only on exit.
|
||||
"""
|
||||
setting = kwargs['setting']
|
||||
enter = kwargs['enter']
|
||||
if setting in ('SETTING_BOTH', 'SETTING_ENTER') and enter:
|
||||
setting = kwargs["setting"]
|
||||
enter = kwargs["enter"]
|
||||
if setting in ("SETTING_BOTH", "SETTING_ENTER") and enter:
|
||||
raise SettingChangeEnterException
|
||||
if setting in ('SETTING_BOTH', 'SETTING_EXIT') and not enter:
|
||||
if setting in ("SETTING_BOTH", "SETTING_EXIT") and not enter:
|
||||
raise SettingChangeExitException
|
||||
|
||||
def check_settings(self):
|
||||
"""Assert that settings for these tests aren't present."""
|
||||
self.assertFalse(hasattr(settings, 'SETTING_BOTH'))
|
||||
self.assertFalse(hasattr(settings, 'SETTING_ENTER'))
|
||||
self.assertFalse(hasattr(settings, 'SETTING_EXIT'))
|
||||
self.assertFalse(hasattr(settings, 'SETTING_PASS'))
|
||||
self.assertFalse(hasattr(settings, "SETTING_BOTH"))
|
||||
self.assertFalse(hasattr(settings, "SETTING_ENTER"))
|
||||
self.assertFalse(hasattr(settings, "SETTING_EXIT"))
|
||||
self.assertFalse(hasattr(settings, "SETTING_PASS"))
|
||||
|
||||
def check_spy_receiver_exit_calls(self, call_count):
|
||||
"""
|
||||
@@ -553,15 +570,16 @@ class OverrideSettingsIsolationOnExceptionTests(SimpleTestCase):
|
||||
with the ``enter=False`` keyword argument.
|
||||
"""
|
||||
kwargs_with_exit = [
|
||||
kwargs for args, kwargs in self.spy_receiver.call_args_list
|
||||
if ('enter', False) in kwargs.items()
|
||||
kwargs
|
||||
for args, kwargs in self.spy_receiver.call_args_list
|
||||
if ("enter", False) in kwargs.items()
|
||||
]
|
||||
self.assertEqual(len(kwargs_with_exit), call_count)
|
||||
|
||||
def test_override_settings_both(self):
|
||||
"""Receiver fails on both enter and exit."""
|
||||
with self.assertRaises(SettingChangeEnterException):
|
||||
with override_settings(SETTING_PASS='BOTH', SETTING_BOTH='BOTH'):
|
||||
with override_settings(SETTING_PASS="BOTH", SETTING_BOTH="BOTH"):
|
||||
pass
|
||||
|
||||
self.check_settings()
|
||||
@@ -571,7 +589,7 @@ class OverrideSettingsIsolationOnExceptionTests(SimpleTestCase):
|
||||
def test_override_settings_enter(self):
|
||||
"""Receiver fails on enter only."""
|
||||
with self.assertRaises(SettingChangeEnterException):
|
||||
with override_settings(SETTING_PASS='ENTER', SETTING_ENTER='ENTER'):
|
||||
with override_settings(SETTING_PASS="ENTER", SETTING_ENTER="ENTER"):
|
||||
pass
|
||||
|
||||
self.check_settings()
|
||||
@@ -581,7 +599,7 @@ class OverrideSettingsIsolationOnExceptionTests(SimpleTestCase):
|
||||
def test_override_settings_exit(self):
|
||||
"""Receiver fails on exit only."""
|
||||
with self.assertRaises(SettingChangeExitException):
|
||||
with override_settings(SETTING_PASS='EXIT', SETTING_EXIT='EXIT'):
|
||||
with override_settings(SETTING_PASS="EXIT", SETTING_EXIT="EXIT"):
|
||||
pass
|
||||
|
||||
self.check_settings()
|
||||
@@ -593,7 +611,8 @@ class OverrideSettingsIsolationOnExceptionTests(SimpleTestCase):
|
||||
Error is raised correctly when reusing the same override_settings
|
||||
instance.
|
||||
"""
|
||||
@override_settings(SETTING_ENTER='ENTER')
|
||||
|
||||
@override_settings(SETTING_ENTER="ENTER")
|
||||
def decorated_function():
|
||||
pass
|
||||
|
||||
@@ -613,17 +632,17 @@ class MediaURLStaticURLPrefixTest(SimpleTestCase):
|
||||
def test_not_prefixed(self):
|
||||
# Don't add SCRIPT_NAME prefix to absolute paths, URLs, or None.
|
||||
tests = (
|
||||
'/path/',
|
||||
'http://myhost.com/path/',
|
||||
'http://myhost/path/',
|
||||
'https://myhost/path/',
|
||||
"/path/",
|
||||
"http://myhost.com/path/",
|
||||
"http://myhost/path/",
|
||||
"https://myhost/path/",
|
||||
None,
|
||||
)
|
||||
for setting in ('MEDIA_URL', 'STATIC_URL'):
|
||||
for setting in ("MEDIA_URL", "STATIC_URL"):
|
||||
for path in tests:
|
||||
new_settings = {setting: path}
|
||||
with self.settings(**new_settings):
|
||||
for script_name in ['/somesubpath', '/somesubpath/', '/', '', None]:
|
||||
for script_name in ["/somesubpath", "/somesubpath/", "/", "", None]:
|
||||
with self.subTest(script_name=script_name, **new_settings):
|
||||
try:
|
||||
self.set_script_name(script_name)
|
||||
@@ -634,15 +653,19 @@ class MediaURLStaticURLPrefixTest(SimpleTestCase):
|
||||
def test_add_script_name_prefix(self):
|
||||
tests = (
|
||||
# Relative paths.
|
||||
('/somesubpath', 'path/', '/somesubpath/path/'),
|
||||
('/somesubpath/', 'path/', '/somesubpath/path/'),
|
||||
('/', 'path/', '/path/'),
|
||||
("/somesubpath", "path/", "/somesubpath/path/"),
|
||||
("/somesubpath/", "path/", "/somesubpath/path/"),
|
||||
("/", "path/", "/path/"),
|
||||
# Invalid URLs.
|
||||
('/somesubpath/', 'htp://myhost.com/path/', '/somesubpath/htp://myhost.com/path/'),
|
||||
(
|
||||
"/somesubpath/",
|
||||
"htp://myhost.com/path/",
|
||||
"/somesubpath/htp://myhost.com/path/",
|
||||
),
|
||||
# Blank settings.
|
||||
('/somesubpath/', '', '/somesubpath/'),
|
||||
("/somesubpath/", "", "/somesubpath/"),
|
||||
)
|
||||
for setting in ('MEDIA_URL', 'STATIC_URL'):
|
||||
for setting in ("MEDIA_URL", "STATIC_URL"):
|
||||
for script_name, path, expected_path in tests:
|
||||
new_settings = {setting: path}
|
||||
with self.settings(**new_settings):
|
||||
|
||||
Reference in New Issue
Block a user