[Checkins] SVN: grok/trunk/src/grok/ support grok.context on adapters (in addition to module-level)

Philipp von Weitershausen philikon at philikon.de
Sat Oct 14 14:39:55 EDT 2006


Log message for revision 70626:
  support grok.context on adapters (in addition to module-level)
  

Changed:
  U   grok/trunk/src/grok/_grok.py
  U   grok/trunk/src/grok/adapter.txt
  A   grok/trunk/src/grok/tests/classcontext.py

-=-
Modified: grok/trunk/src/grok/_grok.py
===================================================================
--- grok/trunk/src/grok/_grok.py	2006-10-14 18:34:42 UTC (rev 70625)
+++ grok/trunk/src/grok/_grok.py	2006-10-14 18:39:54 UTC (rev 70626)
@@ -58,19 +58,19 @@
     if getattr(module, '__grok_context__', None):
         context = module.__grok_context__
 
-    if adapters:
-        if context is None:
+    for factory in adapters:
+        adapter_context = getattr(factory, '__grok_context__', context)
+        if adapter_context is None:
             raise GrokError("Adapter without context")
-        elif context is AMBIGUOUS_CONTEXT:
+        elif adapter_context is AMBIGUOUS_CONTEXT:
             raise GrokError("Ambiguous contexts, please use grok.context.")
+        component.provideAdapter(factory, adapts=(adapter_context,))
 
-    for factory in adapters:
-        component.provideAdapter(factory, adapts=(context,))
-
 def context(obj):    
     locals = sys._getframe(1).f_locals
 
     if '__grok_context__' in locals:
-        raise GrokError("grok.context can only be called once per class or module.")
+        raise GrokError("grok.context can only be called once per class "
+                        "or module.")
 
     locals['__grok_context__'] = obj

Modified: grok/trunk/src/grok/adapter.txt
===================================================================
--- grok/trunk/src/grok/adapter.txt	2006-10-14 18:34:42 UTC (rev 70625)
+++ grok/trunk/src/grok/adapter.txt	2006-10-14 18:39:54 UTC (rev 70626)
@@ -134,3 +134,18 @@
   Traceback (most recent call last):
     ...
   GrokError: grok.context can only be called once per class or module.
+
+Clean up:
+
+  >>> cleanUp()
+
+  >>> grok.grok('grok.tests.classcontext')
+
+  >>> from grok.tests.classcontext import IHome, Home, Cave
+  >>> cave = Cave()
+  >>> home = IHome(cave)
+
+  >>> IHome.providedBy(home)
+  True
+  >>> isinstance(home, Home)
+  True

Added: grok/trunk/src/grok/tests/classcontext.py
===================================================================
--- grok/trunk/src/grok/tests/classcontext.py	2006-10-14 18:34:42 UTC (rev 70625)
+++ grok/trunk/src/grok/tests/classcontext.py	2006-10-14 18:39:54 UTC (rev 70626)
@@ -0,0 +1,15 @@
+import grok
+from zope import interface
+
+class Cave(grok.Model):
+    pass
+
+class Club(grok.Model):
+    pass
+
+class IHome(interface.Interface):
+    pass
+
+class Home(grok.Adapter):
+    grok.implements(IHome)
+    grok.context(Cave)


Property changes on: grok/trunk/src/grok/tests/classcontext.py
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list