summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt3
-rw-r--r--docs/glossary.rst4
-rw-r--r--repoze/bfg/configuration.py15
-rw-r--r--repoze/bfg/tests/test_configuration.py13
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')