Refs #24121 -- Added repr() to LazySettings, Settings, and UserSettingsHolder.

This commit is contained in:
Keryn Knight 2015-07-28 15:37:41 +01:00 committed by Tim Graham
parent 123984ff66
commit 9c40f01a66
2 changed files with 45 additions and 1 deletions

View File

@ -42,6 +42,14 @@ class LazySettings(LazyObject):
self._wrapped = Settings(settings_module) self._wrapped = Settings(settings_module)
def __repr__(self):
# Hardcode the class name as otherwise it yields 'Settings'.
if self._wrapped is empty:
return '<LazySettings [Unevaluated]>'
return '<LazySettings "%(settings_module)s">' % {
'settings_module': self._wrapped.SETTINGS_MODULE,
}
def __getattr__(self, name): def __getattr__(self, name):
if self._wrapped is empty: if self._wrapped is empty:
self._setup(name) self._setup(name)
@ -136,6 +144,12 @@ class Settings(BaseSettings):
def is_overridden(self, setting): def is_overridden(self, setting):
return setting in self._explicit_settings return setting in self._explicit_settings
def __repr__(self):
return '<%(cls)s "%(settings_module)s">' % {
'cls': self.__class__.__name__,
'settings_module': self.SETTINGS_MODULE,
}
class UserSettingsHolder(BaseSettings): class UserSettingsHolder(BaseSettings):
""" """
@ -176,4 +190,9 @@ class UserSettingsHolder(BaseSettings):
set_on_default = getattr(self.default_settings, 'is_overridden', lambda s: False)(setting) set_on_default = getattr(self.default_settings, 'is_overridden', lambda s: False)(setting)
return (deleted or set_locally or set_on_default) return (deleted or set_locally or set_on_default)
def __repr__(self):
return '<%(cls)s>' % {
'cls': self.__class__.__name__,
}
settings = LazySettings() settings = LazySettings()

View File

@ -4,7 +4,7 @@ import unittest
import warnings import warnings
from types import ModuleType from types import ModuleType
from django.conf import LazySettings, Settings, settings from django.conf import ENVIRONMENT_VARIABLE, LazySettings, Settings, settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.http import HttpRequest from django.http import HttpRequest
from django.test import ( from django.test import (
@ -442,6 +442,31 @@ class IsOverriddenTest(SimpleTestCase):
with override_settings(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]>'
self.assertEqual(repr(lazy_settings), expected)
def test_evaluated_lazysettings_repr(self):
lazy_settings = LazySettings()
module = os.environ.get(ENVIRONMENT_VARIABLE)
expected = '<LazySettings "%s">' % module
# Force evaluation of the lazy object.
lazy_settings.APPEND_SLASH
self.assertEqual(repr(lazy_settings), expected)
def test_usersettingsholder_repr(self):
lazy_settings = LazySettings()
lazy_settings.configure(APPEND_SLASH=False)
expected = '<UserSettingsHolder>'
self.assertEqual(repr(lazy_settings._wrapped), expected)
def test_settings_repr(self):
module = os.environ.get(ENVIRONMENT_VARIABLE)
lazy_settings = Settings(module)
expected = '<Settings "%s">' % module
self.assertEqual(repr(lazy_settings), expected)
class TestListSettings(unittest.TestCase): class TestListSettings(unittest.TestCase):
""" """