summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-06-03 12:41:19 +0000
committerChris McDonough <chrism@agendaless.com>2009-06-03 12:41:19 +0000
commit6209577c528ad88b7f042b7454b630f08a093f63 (patch)
treec17286b4589422a814d5845eb4d6bb3f00ea016b
parent421b51e20bb816f2ce5a2fc8efcff860ba4da91c (diff)
downloadpyramid-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.txt11
-rw-r--r--repoze/bfg/tests/test_urldispatch.py16
-rw-r--r--repoze/bfg/urldispatch.py12
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)