From 107390374a40d5fff686ebb084d1d9da5fc07eb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20HUBSCHER?= Date: Thu, 16 Feb 2017 17:16:35 +0100 Subject: Add a failing test. --- pyramid/tests/test_config/test_settings.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pyramid/tests/test_config/test_settings.py b/pyramid/tests/test_config/test_settings.py index 2dbe9b1bb..d6fb8de67 100644 --- a/pyramid/tests/test_config/test_settings.py +++ b/pyramid/tests/test_config/test_settings.py @@ -1,5 +1,6 @@ import unittest + class TestSettingsConfiguratorMixin(unittest.TestCase): def _makeOne(self, *arg, **kw): from pyramid.config import Configurator @@ -63,6 +64,24 @@ class TestSettingsConfiguratorMixin(unittest.TestCase): settings = reg.getUtility(ISettings) self.assertEqual(settings['a'], 1) + def test_settings_parameter_dict_is_never_updated(self): + class ReadOnlyDict(dict): + def __readonly__(self, *args, **kwargs): + raise RuntimeError("Cannot modify ReadOnlyDict") + __setitem__ = __readonly__ + __delitem__ = __readonly__ + pop = __readonly__ + popitem = __readonly__ + clear = __readonly__ + update = __readonly__ + setdefault = __readonly__ + del __readonly__ + + initial = ReadOnlyDict() + config = self._makeOne(settings=initial) + config._set_settings({'a': '1'}) + + class TestSettings(unittest.TestCase): def _getTargetClass(self): -- cgit v1.2.3 From 0edf02b0452fe461570aec9fac34613e38deaad6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20HUBSCHER?= Date: Thu, 16 Feb 2017 17:49:58 +0100 Subject: Settings should not alter the initial dict. --- pyramid/config/settings.py | 1 + pyramid/tests/test_config/test_settings.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pyramid/config/settings.py b/pyramid/config/settings.py index 26eb48951..52b30db81 100644 --- a/pyramid/config/settings.py +++ b/pyramid/config/settings.py @@ -56,6 +56,7 @@ def Settings(d=None, _environ_=os.environ, **kw): keyword args).""" if d is None: d = {} + d = dict(d) d.update(**kw) eget = _environ_.get diff --git a/pyramid/tests/test_config/test_settings.py b/pyramid/tests/test_config/test_settings.py index d6fb8de67..202629358 100644 --- a/pyramid/tests/test_config/test_settings.py +++ b/pyramid/tests/test_config/test_settings.py @@ -12,12 +12,12 @@ class TestSettingsConfiguratorMixin(unittest.TestCase): settings = config._set_settings(None) self.assertTrue(settings) - def test__set_settings_uses_original_dict(self): + def test__set_settings_does_not_uses_original_dict(self): config = self._makeOne() dummy = {} result = config._set_settings(dummy) - self.assertTrue(dummy is result) - self.assertEqual(dummy['pyramid.debug_all'], False) + self.assertTrue(dummy is not result) + self.assertNotIn('pyramid.debug_all', dummy) def test__set_settings_as_dictwithvalues(self): config = self._makeOne() -- cgit v1.2.3 From 3c04c12d227bd08f248519691418f07070f9c587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20HUBSCHER?= Date: Thu, 16 Feb 2017 18:09:05 +0100 Subject: It is actually a good thing that this line is not called. --- pyramid/tests/test_config/test_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyramid/tests/test_config/test_settings.py b/pyramid/tests/test_config/test_settings.py index 202629358..a3afd24e7 100644 --- a/pyramid/tests/test_config/test_settings.py +++ b/pyramid/tests/test_config/test_settings.py @@ -66,7 +66,7 @@ class TestSettingsConfiguratorMixin(unittest.TestCase): def test_settings_parameter_dict_is_never_updated(self): class ReadOnlyDict(dict): - def __readonly__(self, *args, **kwargs): + def __readonly__(self, *args, **kwargs): # pragma: no cover raise RuntimeError("Cannot modify ReadOnlyDict") __setitem__ = __readonly__ __delitem__ = __readonly__ -- cgit v1.2.3