diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-06-03 12:41:19 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-06-03 12:41:19 +0000 |
| commit | 6209577c528ad88b7f042b7454b630f08a093f63 (patch) | |
| tree | c17286b4589422a814d5845eb4d6bb3f00ea016b | |
| parent | 421b51e20bb816f2ce5a2fc8efcff860ba4da91c (diff) | |
| download | pyramid-6209577c528ad88b7f042b7454b630f08a093f63.tar.gz pyramid-6209577c528ad88b7f042b7454b630f08a093f63.tar.bz2 pyramid-6209577c528ad88b7f042b7454b630f08a093f63.zip | |
- The default routes context
(``repoze.bfg.urldispatch.DefaultRoutesContext``) object now
subclasses from ``dict``. This means you can use the mapping
protocol in views against it.
| -rw-r--r-- | CHANGES.txt | 11 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_urldispatch.py | 16 | ||||
| -rw-r--r-- | repoze/bfg/urldispatch.py | 12 |
3 files changed, 33 insertions, 6 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 37e1953af..970078f68 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,14 @@ +Next release +============ + +Features +-------- + +- The default routes context + (``repoze.bfg.urldispatch.DefaultRoutesContext``) object now + subclasses from ``dict``. This means you can use the mapping + protocol in views against it. + 0.9.1 (2009-06-02) ================== diff --git a/repoze/bfg/tests/test_urldispatch.py b/repoze/bfg/tests/test_urldispatch.py index 2b4578f94..3a1e4d497 100644 --- a/repoze/bfg/tests/test_urldispatch.py +++ b/repoze/bfg/tests/test_urldispatch.py @@ -1,6 +1,22 @@ import unittest from repoze.bfg.testing import cleanUp +class TestDefaultRoutesContextFactory(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.urldispatch import DefaultRoutesContext + return DefaultRoutesContext + + def _makeOne(self, **kw): + return self._getTargetClass()(kw) + + def test_getattr(self): + inst = self._makeOne(a=1) + self.assertEqual(inst.a, 1) + + def test_getattr_raises(self): + inst = self._makeOne(a=1) + self.assertRaises(AttributeError, inst.__getattr__, 'b') + class RoutesRootFactoryTests(unittest.TestCase): def setUp(self): cleanUp() diff --git a/repoze/bfg/urldispatch.py b/repoze/bfg/urldispatch.py index 612843cfa..f108b965f 100644 --- a/repoze/bfg/urldispatch.py +++ b/repoze/bfg/urldispatch.py @@ -1,7 +1,5 @@ import re -from zope.component import queryUtility - from zope.interface import implements from zope.interface import alsoProvides from zope.interface import classProvides @@ -13,16 +11,18 @@ from routes import url_for from repoze.bfg.interfaces import IContextNotFound from repoze.bfg.interfaces import IContextURL from repoze.bfg.interfaces import IRoutesContext -from repoze.bfg.interfaces import IRoutesContextFactory from repoze.bfg.interfaces import ITraverser from repoze.bfg.interfaces import ITraverserFactory _marker = () -class DefaultRoutesContext(object): +class DefaultRoutesContext(dict): implements(IRoutesContext) - def __init__(self, **kw): - self.__dict__.update(kw) + def __getattr__(self, name): + try: + return self[name] + except KeyError: + raise AttributeError(name) class RoutesContextNotFound(object): implements(IContextNotFound) |
