[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