[Checkins] SVN: grok/trunk/src/grok/ Multiple models lead to ambiguity errors

Philipp von Weitershausen philikon at philikon.de
Sat Oct 14 14:11:07 EDT 2006


Log message for revision 70620:
  Multiple models lead to ambiguity errors
  

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

-=-
Modified: grok/trunk/src/grok/_grok.py
===================================================================
--- grok/trunk/src/grok/_grok.py	2006-10-14 18:00:02 UTC (rev 70619)
+++ grok/trunk/src/grok/_grok.py	2006-10-14 18:11:07 UTC (rev 70620)
@@ -33,6 +33,7 @@
         return False
     return issubclass(obj, class_)
 
+AMBIGUOUS_CONTEXT = object()
 def grok(dotted_name):
     # TODO for now we only grok modules
     module = resolve(dotted_name)
@@ -46,12 +47,18 @@
             continue
 
         if check_subclass(obj, Model):
-            context = obj
+            if context is None:
+                context = obj
+            else:
+                context = AMBIGUOUS_CONTEXT
         elif check_subclass(obj, Adapter):
             adapters.append(obj)
 
-    if adapters and context is None:
-        raise GrokError("Adapter without context")
+    if adapters:
+        if context is None:
+            raise GrokError("Adapter without context")
+        elif context is AMBIGUOUS_CONTEXT:
+            raise GrokError("Ambiguous contexts, please use grok.context.")
 
     for factory in adapters:
         component.provideAdapter(factory, adapts=(context,))

Modified: grok/trunk/src/grok/adapter.txt
===================================================================
--- grok/trunk/src/grok/adapter.txt	2006-10-14 18:00:02 UTC (rev 70619)
+++ grok/trunk/src/grok/adapter.txt	2006-10-14 18:11:07 UTC (rev 70620)
@@ -78,3 +78,14 @@
   True
   >>> isinstance(home, Home)
   True
+
+Clean up:
+
+  >>> cleanUp()
+
+Multiple models lead to ambiguity:
+
+  >>> grok.grok('grok.tests.multiple')
+  Traceback (most recent call last):
+    ...
+  GrokError: Ambiguous contexts, please use grok.context.

Added: grok/trunk/src/grok/tests/multiple.py
===================================================================
--- grok/trunk/src/grok/tests/multiple.py	2006-10-14 18:00:02 UTC (rev 70619)
+++ grok/trunk/src/grok/tests/multiple.py	2006-10-14 18:11:07 UTC (rev 70620)
@@ -0,0 +1,14 @@
+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)


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



More information about the Checkins mailing list