diff options
| -rw-r--r-- | CHANGES.txt | 3 | ||||
| -rw-r--r-- | docs/glossary.rst | 4 | ||||
| -rw-r--r-- | repoze/bfg/configuration.py | 15 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_configuration.py | 13 |
4 files changed, 31 insertions, 4 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index c32c0909b..0b5507b56 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -47,6 +47,9 @@ Paster Templates Internal -------- +- Add an API to the ``Configurator`` named ``get_routes_mapper``. + This returns an object implementing the ``IRoutesMapper`` interface. + - The ``repoze.bfg.urldispatch.RoutesMapper`` object now has a ``get_route`` method which returns a single Route object or ``None``. diff --git a/docs/glossary.rst b/docs/glossary.rst index ce0d57111..81f5cb797 100644 --- a/docs/glossary.rst +++ b/docs/glossary.rst @@ -528,6 +528,10 @@ Glossary current request, the next route (in definition order) is attempted. + routes mapper + An object which compares path information from a request to an + ordered set of route patterns. See :ref:`urldispatch_chapter`. + predicate A test which returns ``True`` or ``False``. Two different types of predicates exist in :mod:`repoze.bfg`: a :term:`view predicate` diff --git a/repoze/bfg/configuration.py b/repoze/bfg/configuration.py index 962ba8f25..5a97c4f38 100644 --- a/repoze/bfg/configuration.py +++ b/repoze/bfg/configuration.py @@ -1338,10 +1338,8 @@ class Configurator(object): _info=_info, ) - mapper = self.registry.queryUtility(IRoutesMapper) - if mapper is None: - mapper = RoutesMapper() - self.registry.registerUtility(mapper, IRoutesMapper) + mapper = self.get_routes_mapper() + factory = self.maybe_dotted(factory) if pattern is None: pattern = path @@ -1349,6 +1347,15 @@ class Configurator(object): raise ConfigurationError('"pattern" argument may not be None') return mapper.connect(name, pattern, factory, predicates=predicates) + def get_routes_mapper(self): + """ Return the :term:`routes mapper` object associated with + this configurator's :term:`registry`.""" + mapper = self.registry.queryUtility(IRoutesMapper) + if mapper is None: + mapper = RoutesMapper() + self.registry.registerUtility(mapper, IRoutesMapper) + return mapper + def scan(self, package=None, categories=None, _info=u''): """ Scan a Python package and any of its subpackages for objects marked with :term:`configuration decoration` such as diff --git a/repoze/bfg/tests/test_configuration.py b/repoze/bfg/tests/test_configuration.py index fc01e3ed4..062fbfa0b 100644 --- a/repoze/bfg/tests/test_configuration.py +++ b/repoze/bfg/tests/test_configuration.py @@ -1715,6 +1715,19 @@ class ConfiguratorTests(unittest.TestCase): self.assertEqual(len(routes[0].predicates), num_predicates) return route + def test_get_routes_mapper_not_yet_registered(self): + config = self._makeOne() + mapper = config.get_routes_mapper() + self.assertEqual(mapper.routelist, []) + + def test_get_routes_mapper_already_registered(self): + from repoze.bfg.interfaces import IRoutesMapper + config = self._makeOne() + mapper = object() + config.registry.registerUtility(mapper, IRoutesMapper) + result = config.get_routes_mapper() + self.assertEqual(result, mapper) + def test_add_route_defaults(self): config = self._makeOne() route = config.add_route('name', 'path') |
