diff options
| -rw-r--r-- | CHANGES.txt | 6 | ||||
| -rw-r--r-- | docs/api/configuration.rst | 2 | ||||
| -rw-r--r-- | repoze/bfg/configuration.py | 12 | ||||
| -rw-r--r-- | repoze/bfg/testing.py | 4 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_configuration.py | 20 |
5 files changed, 44 insertions, 0 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 0f07c4faf..5127fc4ed 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,12 @@ Next release Features -------- +- Add a new API to the ``repoze.bfg.configuration.Configurator`` + class: ``add_settings``. This API can be used to add "settings" + (information returned within via the + ``repoze.bfg.settings.get_settings`` API) after the configurator has + been initially set up. This is most useful for testing purposes. + - Add two new APIs to the ``repoze.bfg.configuration.Configurator`` class: ``add_adapter`` and ``add_utility``. These, respectively, perform the same functions as the ``registerAdapter`` and diff --git a/docs/api/configuration.rst b/docs/api/configuration.rst index f4095a3db..beb86f7ef 100644 --- a/docs/api/configuration.rst +++ b/docs/api/configuration.rst @@ -17,6 +17,8 @@ .. automethod:: add_static_view(name, path, cache_max_age=3600) + .. automethod:: add_settings + .. automethod:: add_subscriber .. automethod:: add_view diff --git a/repoze/bfg/configuration.py b/repoze/bfg/configuration.py index 44b77e138..8d88c5384 100644 --- a/repoze/bfg/configuration.py +++ b/repoze/bfg/configuration.py @@ -164,6 +164,7 @@ class Configurator(object): def _set_settings(self, mapping): settings = Settings(mapping or {}) self.registry.registerUtility(settings, ISettings) + return settings def _set_root_factory(self, factory): """ Add a :term:`root factory` to the current configuration @@ -308,6 +309,17 @@ class Configurator(object): self.registry.registerHandler(subscriber, iface, info=info) return subscriber + def add_settings(self, settings): + """ Add additional settings (beyond the ones passed in as + ``settings`` to the constructor of this object) to the + dictionarylike object returned from + ``repoze.bfg.settings.get_settings()``. The ``settings`` + argument should be a dictionarylike object.""" + utility = self.registry.queryUtility(ISettings) + if utility is None: + utility = self._set_settings(settings) + utility.update(settings) + def add_subscription_adapter(self, factory, required=None, provided=None, info=u''): """Add a Zope Component Architecture subscription adapter. diff --git a/repoze/bfg/testing.py b/repoze/bfg/testing.py index 2b9a7a904..5d0a756e7 100644 --- a/repoze/bfg/testing.py +++ b/repoze/bfg/testing.py @@ -320,6 +320,10 @@ def registerSettings(dictarg=None, **kw): return values from it. .. note:: This API is new as of :mod:`repoze.bfg` 1.1. + + .. warning:: This API is deprecated as of :mod:`repoze.bfg` 1.2. + Instead use the ``add_settings`` method of a + :term:`Configurator` in your unit and integration tests. """ reg = get_current_registry() settings = reg.queryUtility(ISettings) diff --git a/repoze/bfg/tests/test_configuration.py b/repoze/bfg/tests/test_configuration.py index 520f9a5bc..9c48cc010 100644 --- a/repoze/bfg/tests/test_configuration.py +++ b/repoze/bfg/tests/test_configuration.py @@ -243,6 +243,26 @@ class ConfiguratorTests(unittest.TestCase): self.assertEqual(reg.getUtility(IRendererFactory, 'yeah'), renderer) + def test_add_settings_settings_already_registered(self): + from repoze.bfg.registry import Registry + from repoze.bfg.interfaces import ISettings + reg = Registry() + config = self._makeOne(reg) + config._set_settings({'a':1}) + config.add_settings({'b':2}) + settings = reg.getUtility(ISettings) + self.assertEqual(settings['a'], 1) + self.assertEqual(settings['b'], 2) + + def test_add_settings_settings_not_yet_registered(self): + from repoze.bfg.registry import Registry + from repoze.bfg.interfaces import ISettings + reg = Registry() + config = self._makeOne(reg) + config.add_settings({'a':1}) + settings = reg.getUtility(ISettings) + self.assertEqual(settings['a'], 1) + def test_add_subscriber_defaults(self): from zope.interface import implements from zope.interface import Interface |
