[Checkins] SVN: five.grok/trunk/src/five/grok/ added multiadapters
eric casteleijn
eric at infrae.com
Sat May 3 11:45:29 EDT 2008
Log message for revision 86243:
added multiadapters
Changed:
U five.grok/trunk/src/five/grok/__init__.py
A five.grok/trunk/src/five/grok/tests/multiadapter.py
U five.grok/trunk/src/five/grok/tests/test_all.py
-=-
Modified: five.grok/trunk/src/five/grok/__init__.py
===================================================================
--- five.grok/trunk/src/five/grok/__init__.py 2008-05-03 15:35:13 UTC (rev 86242)
+++ five.grok/trunk/src/five/grok/__init__.py 2008-05-03 15:45:29 UTC (rev 86243)
@@ -1,11 +1,12 @@
# Import adapter and utility support from grokcore.component.
-from grokcore.component.components import GlobalUtility, Adapter
+from grokcore.component.components import GlobalUtility, Adapter, MultiAdapter
from grokcore.component.directive import name, provides
from grokcore.component.directive import order, direct
from grokcore.component.directive import context, title, baseclass
from zope.interface import implements
+from zope.component import adapts
from components import View
from directive import require
Added: five.grok/trunk/src/five/grok/tests/multiadapter.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/multiadapter.py (rev 0)
+++ five.grok/trunk/src/five/grok/tests/multiadapter.py 2008-05-03 15:45:29 UTC (rev 86243)
@@ -0,0 +1,90 @@
+"""
+Testing that grokcore multiadapters work under Zope2
+
+__init__():
+
+ >>> cave = Cave()
+ >>> fireplace = Fireplace()
+
+ >>> from zope import component
+ >>> home = component.getMultiAdapter((cave, fireplace))
+
+ >>> IHome.providedBy(home)
+ True
+ >>> isinstance(home, Home)
+ True
+ >>> home.cave is cave
+ True
+ >>> home.fireplace is fireplace
+ True
+
+This also works for named adapters using grok.name:
+
+ >>> home = component.getMultiAdapter((cave, fireplace), name='home2')
+
+ >>> IHome.providedBy(home)
+ True
+ >>> isinstance(home, Home2)
+ True
+ >>> home.cave is cave
+ True
+ >>> home.fireplace is fireplace
+ True
+
+Multiadapters that implement more than one interface can use grok.provides to
+specify the one to use:
+
+ >>> home = component.getMultiAdapter((cave, fireplace), name='home3')
+
+ >>> IHome.providedBy(home)
+ True
+ >>> isinstance(home, Home3)
+ True
+ >>> home.cave is cave
+ True
+ >>> home.fireplace is fireplace
+ True
+"""
+
+from five import grok
+from zope import interface
+from OFS.SimpleItem import SimpleItem
+
+class Cave(SimpleItem):
+ pass
+
+class Fireplace(SimpleItem):
+ pass
+
+class IHome(interface.Interface):
+ pass
+
+class Home(grok.MultiAdapter):
+ grok.adapts(Cave, Fireplace)
+ grok.implements(IHome)
+
+ def __init__(self, cave, fireplace):
+ self.cave = cave
+ self.fireplace = fireplace
+
+class Home2(grok.MultiAdapter):
+ grok.adapts(Cave, Fireplace)
+ grok.implements(IHome)
+ grok.name('home2')
+
+ def __init__(self, cave, fireplace):
+ self.cave = cave
+ self.fireplace = fireplace
+
+class IFireplace(interface.Interface):
+ pass
+
+class Home3(grok.MultiAdapter):
+ grok.adapts(Cave, Fireplace)
+ grok.implements(IHome, IFireplace)
+ grok.provides(IHome)
+ grok.name('home3')
+
+ def __init__(self, cave, fireplace):
+ self.cave = cave
+ self.fireplace = fireplace
Modified: five.grok/trunk/src/five/grok/tests/test_all.py
===================================================================
--- five.grok/trunk/src/five/grok/tests/test_all.py 2008-05-03 15:35:13 UTC (rev 86242)
+++ five.grok/trunk/src/five/grok/tests/test_all.py 2008-05-03 15:45:29 UTC (rev 86243)
@@ -31,6 +31,10 @@
setUp=setUp, tearDown=testing.tearDown),
doctestunit.DocTestSuite(
+ module='five.grok.tests.multiadapter',
+ setUp=setUp, tearDown=testing.tearDown),
+
+ doctestunit.DocTestSuite(
module='five.grok.tests.utilities',
setUp=setUp, tearDown=testing.tearDown),
More information about the Checkins
mailing list