Commit 6070a5d6 authored by Carl Meyer's avatar Carl Meyer
Browse files

Fixes #21833 -- Fix UserSettingsHolder.is_overridden() and add tests.

parent 56516ade
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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)

@@ -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()
+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,
@@ -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'))