[Checkins] SVN: grok/trunk/src/grok/ test that grok.MultiAdapter must specify grok.adapts

Wolfgang Schnerring wosc at wosc.de
Wed Oct 18 09:32:24 EDT 2006


Log message for revision 70781:
  test that grok.MultiAdapter must specify grok.adapts

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

-=-
Modified: grok/trunk/src/grok/_grok.py
===================================================================
--- grok/trunk/src/grok/_grok.py	2006-10-18 13:26:05 UTC (rev 70780)
+++ grok/trunk/src/grok/_grok.py	2006-10-18 13:32:23 UTC (rev 70781)
@@ -311,6 +311,7 @@
 def register_multiadapters(multiadapters):
     for factory in multiadapters:
         check_implements_one(factory)
+        check_adapts(factory)
         name = class_annotation(factory, 'grok.name', '')
         component.provideAdapter(factory, name=name)
 
@@ -428,6 +429,12 @@
                         "(use grok.implements to specify)."
                         % class_, class_)
 
+def check_adapts(class_):
+    if component.adaptedBy(class_) is None:
+        raise GrokError("%r must specify which contexts it adapts "
+                        "(use grok.adapts to specify)."
+                        % class_, class_)
+
 def determine_module_context(module_info, models):
     if len(models) == 0:
         context = None

Added: grok/trunk/src/grok/tests/adapter/multiadaptsnone.py
===================================================================
--- grok/trunk/src/grok/tests/adapter/multiadaptsnone.py	2006-10-18 13:26:05 UTC (rev 70780)
+++ grok/trunk/src/grok/tests/adapter/multiadaptsnone.py	2006-10-18 13:32:23 UTC (rev 70781)
@@ -0,0 +1,18 @@
+"""
+Subclasses of grok.MultiAdapter must declare what they adapt, using grok.adapts:
+
+  >>> grok.grok(__name__)
+  Traceback (most recent call last):
+    ...
+  GrokError: <class 'grok.tests.adapter.multiadaptsnone.Home'> must specify
+  which contexts it adapts (use grok.adapts to specify).
+"""
+import grok
+
+from zope import interface
+
+class IHome(interface.Interface):
+    pass
+
+class Home(grok.MultiAdapter):
+    grok.implements(IHome)



More information about the Checkins mailing list