Kaydet (Commit) 163236ea authored tarafından orlnub123's avatar orlnub123 Kaydeden (comit) Tim Graham

Fixed #30234 -- Disallowed non-upper settings in settings.configure().

üst 9681e968
......@@ -104,6 +104,8 @@ class LazySettings(LazyObject):
raise RuntimeError('Settings already configured.')
holder = UserSettingsHolder(default_settings)
for name, value in options.items():
if not name.isupper():
raise TypeError('Setting %r must be uppercase.' % name)
setattr(holder, name, value)
self._wrapped = holder
......@@ -198,7 +200,7 @@ class UserSettingsHolder:
self.default_settings = default_settings
def __getattr__(self, name):
if name in self._deleted:
if not name.isupper() or name in self._deleted:
raise AttributeError
return getattr(self.default_settings, name)
......
import os
import sys
import unittest
from types import ModuleType
from types import ModuleType, SimpleNamespace
from unittest import mock
from django.conf import ENVIRONMENT_VARIABLE, LazySettings, Settings, settings
......@@ -318,6 +318,17 @@ class SettingsTests(SimpleTestCase):
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')
def test_nonupper_settings_ignored_in_default_settings(self):
s = LazySettings()
s.configure(SimpleNamespace(foo='bar'))
with self.assertRaises(AttributeError):
getattr(s, 'foo')
@requires_tz_support
@mock.patch('django.conf.global_settings.TIME_ZONE', 'test')
def test_incorrect_timezone(self):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment