summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurence Rowe <laurence@lrowe.co.uk>2013-04-24 14:38:41 -0700
committerLaurence Rowe <laurence@lrowe.co.uk>2013-04-24 14:47:12 -0700
commitf3bffdfc35a5ecbb45b5f63bdb08bdc41553b63d (patch)
tree320dac7ad7c51a79549ef9ad16f8eb3e9ce81ae7
parent1a48c8b7952d35b217c3adf3f6be11026fefd03b (diff)
downloadpyramid-f3bffdfc35a5ecbb45b5f63bdb08bdc41553b63d.tar.gz
pyramid-f3bffdfc35a5ecbb45b5f63bdb08bdc41553b63d.tar.bz2
pyramid-f3bffdfc35a5ecbb45b5f63bdb08bdc41553b63d.zip
Consider superclass views after predicate mismatch
The merged fix for #786 only worked for views registered to an interface.
-rw-r--r--pyramid/router.py2
-rw-r--r--pyramid/tests/test_router.py8
2 files changed, 4 insertions, 6 deletions
diff --git a/pyramid/router.py b/pyramid/router.py
index 63c12a1af..f780f6711 100644
--- a/pyramid/router.py
+++ b/pyramid/router.py
@@ -165,7 +165,7 @@ class Router(object):
except PredicateMismatch:
# look for other views that meet the predicate
# criteria
- for iface in context_iface.flattened():
+ for iface in context_iface.__sro__[1:]:
view_callable = adapters.lookup(
(IViewClassifier, request.request_iface, iface),
IView, name=view_name, default=None)
diff --git a/pyramid/tests/test_router.py b/pyramid/tests/test_router.py
index 432959147..b836d7d72 100644
--- a/pyramid/tests/test_router.py
+++ b/pyramid/tests/test_router.py
@@ -1180,11 +1180,9 @@ class TestRouter(unittest.TestCase):
from pyramid.interfaces import IViewClassifier
from pyramid.interfaces import IRequest, IResponse
from pyramid.response import Response
- from zope.interface import Interface, implementer
- class IContext(Interface):
+ class BaseContext:
pass
- @implementer(IContext)
- class DummyContext:
+ class DummyContext(BaseContext):
pass
context = DummyContext()
self._registerTraverserFactory(context)
@@ -1193,7 +1191,7 @@ class TestRouter(unittest.TestCase):
DummyContext)
good_view = DummyView('abc')
self._registerView(self.config.derive_view(good_view),
- '', IViewClassifier, IRequest, IContext)
+ '', IViewClassifier, IRequest, BaseContext)
router = self._makeOne()
def make_response(s):
return Response(s)