Loading django/conf/__init__.py +4 −5 Original line number Diff line number Diff line Loading @@ -108,7 +108,6 @@ class Settings(BaseSettings): isinstance(setting_value, six.string_types)): raise ImproperlyConfigured("The %s setting must be a tuple. " "Please fix your settings." % setting) setattr(self, setting, setting_value) self._explicit_settings.add(setting) Loading Loading @@ -164,9 +163,9 @@ class UserSettingsHolder(BaseSettings): return list(self.__dict__) + dir(self.default_settings) def is_overridden(self, setting): if setting in self._deleted: return False else: return self.default_settings.is_overridden(setting) deleted = (setting in self._deleted) set_locally = (setting in self.__dict__) set_on_default = getattr(self.default_settings, 'is_overridden', lambda s: False)(setting) return (deleted or set_locally or set_on_default) settings = LazySettings() tests/settings_tests/tests.py +31 −1 Original line number Diff line number Diff line import os import sys from types import ModuleType import unittest import warnings from django.conf import settings from django.conf import LazySettings, Settings, settings from django.core.exceptions import ImproperlyConfigured from django.http import HttpRequest from django.test import (SimpleTestCase, TransactionTestCase, TestCase, Loading Loading @@ -404,3 +406,31 @@ class SecureProxySslHeaderTest(TestCase): req = HttpRequest() req.META['HTTP_X_FORWARDED_PROTOCOL'] = 'https' self.assertEqual(req.is_secure(), True) class IsOverriddenTest(TestCase): def test_configure(self): s = LazySettings() s.configure(SECRET_KEY='foo') self.assertTrue(s.is_overridden('SECRET_KEY')) def test_module(self): settings_module = ModuleType('fake_settings_module') settings_module.SECRET_KEY = 'foo' sys.modules['fake_settings_module'] = settings_module try: s = Settings('fake_settings_module') self.assertTrue(s.is_overridden('SECRET_KEY')) self.assertFalse(s.is_overridden('TEMPLATE_LOADERS')) finally: del sys.modules['fake_settings_module'] def test_override(self): self.assertFalse(settings.is_overridden('TEMPLATE_LOADERS')) with override_settings(TEMPLATE_LOADERS=[]): self.assertTrue(settings.is_overridden('TEMPLATE_LOADERS')) Loading
django/conf/__init__.py +4 −5 Original line number Diff line number Diff line Loading @@ -108,7 +108,6 @@ class Settings(BaseSettings): isinstance(setting_value, six.string_types)): raise ImproperlyConfigured("The %s setting must be a tuple. " "Please fix your settings." % setting) setattr(self, setting, setting_value) self._explicit_settings.add(setting) Loading Loading @@ -164,9 +163,9 @@ class UserSettingsHolder(BaseSettings): return list(self.__dict__) + dir(self.default_settings) def is_overridden(self, setting): if setting in self._deleted: return False else: return self.default_settings.is_overridden(setting) deleted = (setting in self._deleted) set_locally = (setting in self.__dict__) set_on_default = getattr(self.default_settings, 'is_overridden', lambda s: False)(setting) return (deleted or set_locally or set_on_default) settings = LazySettings()
tests/settings_tests/tests.py +31 −1 Original line number Diff line number Diff line import os import sys from types import ModuleType import unittest import warnings from django.conf import settings from django.conf import LazySettings, Settings, settings from django.core.exceptions import ImproperlyConfigured from django.http import HttpRequest from django.test import (SimpleTestCase, TransactionTestCase, TestCase, Loading Loading @@ -404,3 +406,31 @@ class SecureProxySslHeaderTest(TestCase): req = HttpRequest() req.META['HTTP_X_FORWARDED_PROTOCOL'] = 'https' self.assertEqual(req.is_secure(), True) class IsOverriddenTest(TestCase): def test_configure(self): s = LazySettings() s.configure(SECRET_KEY='foo') self.assertTrue(s.is_overridden('SECRET_KEY')) def test_module(self): settings_module = ModuleType('fake_settings_module') settings_module.SECRET_KEY = 'foo' sys.modules['fake_settings_module'] = settings_module try: s = Settings('fake_settings_module') self.assertTrue(s.is_overridden('SECRET_KEY')) self.assertFalse(s.is_overridden('TEMPLATE_LOADERS')) finally: del sys.modules['fake_settings_module'] def test_override(self): self.assertFalse(settings.is_overridden('TEMPLATE_LOADERS')) with override_settings(TEMPLATE_LOADERS=[]): self.assertTrue(settings.is_overridden('TEMPLATE_LOADERS'))