[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