[Checkins] SVN: grok/trunk/src/grok/ test that Adapter,
MultiAdapter and Utility have to implement exactly one interface
Wolfgang Schnerring
wosc at wosc.de
Wed Oct 18 09:26:06 EDT 2006
Log message for revision 70780:
test that Adapter, MultiAdapter and Utility have to implement exactly one interface
Changed:
U grok/trunk/src/grok/_grok.py
A grok/trunk/src/grok/tests/adapter/implementsmany.py
A grok/trunk/src/grok/tests/adapter/implementsnone.py
A grok/trunk/src/grok/tests/adapter/implementsnonemulti.py
A grok/trunk/src/grok/tests/utility/implementsnone.py
-=-
Modified: grok/trunk/src/grok/_grok.py
===================================================================
--- grok/trunk/src/grok/_grok.py 2006-10-18 12:47:28 UTC (rev 70779)
+++ grok/trunk/src/grok/_grok.py 2006-10-18 13:26:05 UTC (rev 70780)
@@ -304,16 +304,19 @@
def register_adapters(context, adapters):
for factory in adapters:
adapter_context = determine_class_context(factory, context)
+ check_implements_one(factory)
name = class_annotation(factory, 'grok.name', '')
component.provideAdapter(factory, adapts=(adapter_context,), name=name)
def register_multiadapters(multiadapters):
for factory in multiadapters:
+ check_implements_one(factory)
name = class_annotation(factory, 'grok.name', '')
component.provideAdapter(factory, name=name)
def register_utilities(utilities):
for factory in utilities:
+ check_implements_one(factory)
name = class_annotation(factory, 'grok.name', '')
component.provideUtility(factory(), name=name)
@@ -419,6 +422,12 @@
raise GrokError("Multiple possible contexts for %r, please use "
"grok.context." % component, component)
+def check_implements_one(class_):
+ if len(list(interface.implementedBy(class_))) != 1:
+ raise GrokError("%r must implement exactly one interface "
+ "(use grok.implements to specify)."
+ % class_, class_)
+
def determine_module_context(module_info, models):
if len(models) == 0:
context = None
Added: grok/trunk/src/grok/tests/adapter/implementsmany.py
===================================================================
--- grok/trunk/src/grok/tests/adapter/implementsmany.py 2006-10-18 12:47:28 UTC (rev 70779)
+++ grok/trunk/src/grok/tests/adapter/implementsmany.py 2006-10-18 13:26:05 UTC (rev 70780)
@@ -0,0 +1,24 @@
+"""
+Subclasses of grok.Adapter and grok.MultiAdapter must implement exactly one
+interface:
+
+ >>> grok.grok(__name__)
+ Traceback (most recent call last):
+ ...
+ GrokError: <class 'grok.tests.adapter.implementsmany.Home'> must implement exactly one interface (use grok.implements to specify).
+"""
+import grok
+
+from zope import interface
+
+class Cave(grok.Model):
+ pass
+
+class IHome(interface.Interface):
+ pass
+
+class IFireplace(interface.Interface):
+ pass
+
+class Home(grok.Adapter):
+ grok.implements(IHome, IFireplace)
Added: grok/trunk/src/grok/tests/adapter/implementsnone.py
===================================================================
--- grok/trunk/src/grok/tests/adapter/implementsnone.py 2006-10-18 12:47:28 UTC (rev 70779)
+++ grok/trunk/src/grok/tests/adapter/implementsnone.py 2006-10-18 13:26:05 UTC (rev 70780)
@@ -0,0 +1,17 @@
+"""
+Subclasses of grok.Adapter and grok.MultiAdapter must implement exactly one
+interface:
+
+ >>> grok.grok(__name__)
+ Traceback (most recent call last):
+ ...
+ GrokError: <class 'grok.tests.adapter.implementsnone.Home'> must
+ implement exactly one interface (use grok.implements to specify).
+"""
+import grok
+
+class Cave(grok.Model):
+ pass
+
+class Home(grok.Adapter):
+ pass
Added: grok/trunk/src/grok/tests/adapter/implementsnonemulti.py
===================================================================
--- grok/trunk/src/grok/tests/adapter/implementsnonemulti.py 2006-10-18 12:47:28 UTC (rev 70779)
+++ grok/trunk/src/grok/tests/adapter/implementsnonemulti.py 2006-10-18 13:26:05 UTC (rev 70780)
@@ -0,0 +1,17 @@
+"""
+Subclasses of grok.Adapter and grok.MultiAdapter must implement exactly one
+interface:
+
+ >>> grok.grok(__name__)
+ Traceback (most recent call last):
+ ...
+ GrokError: <class 'grok.tests.adapter.implementsnonemulti.Home'> must
+ implement exactly one interface (use grok.implements to specify).
+"""
+import grok
+
+class Cave(grok.Model):
+ pass
+
+class Home(grok.MultiAdapter):
+ pass
Added: grok/trunk/src/grok/tests/utility/implementsnone.py
===================================================================
--- grok/trunk/src/grok/tests/utility/implementsnone.py 2006-10-18 12:47:28 UTC (rev 70779)
+++ grok/trunk/src/grok/tests/utility/implementsnone.py 2006-10-18 13:26:05 UTC (rev 70780)
@@ -0,0 +1,13 @@
+"""
+Subclasses of grok.Utility must implement exactly one interface:
+
+ >>> grok.grok(__name__)
+ Traceback (most recent call last):
+ ...
+ GrokError: <class 'grok.tests.utility.implementsnone.Club'> must
+ implement exactly one interface (use grok.implements to specify).
+"""
+import grok
+
+class Club(grok.Utility):
+ pass
More information about the Checkins
mailing list