[Checkins] SVN: grokcore.component/trunk/ Fix Launchpad issue #960097.

Sylvain Viollow cvs-admin at zope.org
Sun Apr 29 14:41:57 UTC 2012


Log message for revision 125392:
  Fix Launchpad issue #960097.
  
  

Changed:
  U   grokcore.component/trunk/CHANGES.txt
  U   grokcore.component/trunk/setup.py
  U   grokcore.component/trunk/src/grokcore/component/directive.py
  U   grokcore.component/trunk/src/grokcore/component/meta.py
  U   grokcore.component/trunk/src/grokcore/component/tests/adapter/globaladapter.py

-=-
Modified: grokcore.component/trunk/CHANGES.txt
===================================================================
--- grokcore.component/trunk/CHANGES.txt	2012-04-29 14:13:40 UTC (rev 125391)
+++ grokcore.component/trunk/CHANGES.txt	2012-04-29 14:41:53 UTC (rev 125392)
@@ -4,6 +4,10 @@
 2.5 (unreleased)
 ----------------
 
+- Fix the `global_adapter` to properly use information annotated by
+  ``grok.adapter``, and using the IContext object if it was not
+  specified. (Fix Launchpad issue #960097).
+
 - Add a ``key`` option to ``sort_components`` that behave like ``key``
   options available on standard Python sort methods.
 

Modified: grokcore.component/trunk/setup.py
===================================================================
--- grokcore.component/trunk/setup.py	2012-04-29 14:13:40 UTC (rev 125391)
+++ grokcore.component/trunk/setup.py	2012-04-29 14:41:53 UTC (rev 125392)
@@ -45,4 +45,8 @@
                       ],
     tests_require=tests_require,
     extras_require={'test': tests_require},
+    entry_points = """
+        [grok.api]
+        grokcore.component = grokcore.component.interfaces:IGrokcoreComponentAPI
+    """
 )

Modified: grokcore.component/trunk/src/grokcore/component/directive.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/directive.py	2012-04-29 14:13:40 UTC (rev 125391)
+++ grokcore.component/trunk/src/grokcore/component/directive.py	2012-04-29 14:41:53 UTC (rev 125392)
@@ -71,7 +71,9 @@
             raise GrokImportError(
                 "You can only pass an interface to the "
                 "provides argument of %s." % self.name)
-        if not isinstance(adapts, (list, tuple,)):
+        if adapts is None:
+            adapts = getattr(factory, '__component_adapts__', None)
+        elif not isinstance(adapts, (list, tuple,)):
             adapts = (adapts,)
         elif isinstance(adapts, list):
             adapts = tuple(adapts)

Modified: grokcore.component/trunk/src/grokcore/component/meta.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/meta.py	2012-04-29 14:13:40 UTC (rev 125391)
+++ grokcore.component/trunk/src/grokcore/component/meta.py	2012-04-29 14:41:53 UTC (rev 125392)
@@ -196,9 +196,7 @@
                 bound = grokcore.component.provides.bind(default=None)
                 provides = bound.get(factory)
             if adapts is None:
-                adapts = getattr(factory, '__component_adapts__', None)
-                if adapts is None:
-                    adapts = grokcore.component.context.bind().get(factory)
+                adapts = (grokcore.component.context.bind().get(module),)
             if name is None:
                 name = grokcore.component.name.bind().get(factory)
 

Modified: grokcore.component/trunk/src/grokcore/component/tests/adapter/globaladapter.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/tests/adapter/globaladapter.py	2012-04-29 14:13:40 UTC (rev 125391)
+++ grokcore.component/trunk/src/grokcore/component/tests/adapter/globaladapter.py	2012-04-29 14:41:53 UTC (rev 125392)
@@ -29,6 +29,14 @@
   >>> home.id
   u'six'
 
+  >>> home = getAdapter(fireplace, IHome, name=u'seven')
+  >>> home.id
+  u'seven-a'
+
+  >>> home = getMultiAdapter((cave, fireplace), IHome, name=u'seven')
+  >>> home.id
+  u'seven-b'
+
   >>> garage = getAdapter(cave, IGarage, name='named_garage_factory_name')
   >>> garage.id
   u"I'm a garage"
@@ -43,21 +51,26 @@
 from zope import interface
 from zope.interface import implementer
 
+
 class Cave(grok.Context):
     pass
 
+
 class Fireplace(object):
     pass
 
+
 class IHome(interface.Interface):
     pass
 
+
 class Home(object):
     grok.implements(IHome)
 
     def __init__(self, id):
         self.id = id
 
+
 class CaveHomeFactory(object):
     grok.implements(IHome)
 
@@ -67,19 +80,24 @@
     def __call__(self, context):
         return Home(self.id)
 
+
 class CaveFireplaceHomeFactory(object):
+
     def __init__(self, id):
         self.id = id
 
     def __call__(self, cave, fireplace):
         return Home(self.id)
 
+
 factory1 = CaveHomeFactory(u"one")
 factory2 = CaveHomeFactory(u"two")
 factory3 = CaveHomeFactory(u"three")
 factory4 = CaveHomeFactory(u"four")
 factory5 = CaveHomeFactory(u"five")
 factory6 = CaveFireplaceHomeFactory(u"six")
+factory7a = CaveHomeFactory(u"seven-a")
+factory7b = CaveFireplaceHomeFactory(u"seven-b")
 
 # make some direct assertions
 
@@ -87,19 +105,35 @@
 implementer(IHome)(factory4)
 implementer(IHome)(factory5)
 implementer(IHome)(factory6)
+implementer(IHome)(factory7a)
+implementer(IHome)(factory7b)
 
 grok.adapter(Fireplace)(factory5)
+grok.adapter(Fireplace)(factory7a)
+grok.adapter(Cave, Fireplace)(factory7b)
 
-grok.global_adapter(factory1, Cave, IHome)  # should accept single value for adapts
-grok.global_adapter(factory2, (Cave,), IHome, name="two")  # should accept tuple for adapts
-grok.global_adapter(factory3, Cave, name="three")  # should look at the provided interface
-grok.global_adapter(factory4, name=u"four")  # should pick the canonical context
-grok.global_adapter(factory5, name="five")  # should use __component_adapts__
-grok.global_adapter(factory6, (Cave, Fireplace,))  # should work as multi-adapter
+# should accept single value for adapts
+grok.global_adapter(factory1, Cave, IHome)
+# should accept tuple for adapts
+grok.global_adapter(factory2, (Cave,), IHome, name=u"two")
+# should look at the provided interface
+grok.global_adapter(factory3, Cave, name=u"three")
+# should pick the canonical context
+grok.global_adapter(factory4, name=u"four")
+# should use __component_adapts__
+grok.global_adapter(factory5, name=u"five")
+# should work as multi-adapter
+grok.global_adapter(factory6, (Cave, Fireplace,))
+# should use __component_adapts__ adapting one object
+grok.global_adapter(factory7a, name=u"seven")
+# should use __component_adapts__ adaping two objects
+grok.global_adapter(factory7b, name=u"seven")
 
+
 class IGarage(interface.Interface):
     pass
 
+
 class NamedGarageFactory(object):
     grok.implements(IGarage)
     grok.name('named_garage_factory_name')
@@ -109,5 +143,7 @@
 
 implementer(IGarage)(NamedGarageFactory)
 
-grok.global_adapter(NamedGarageFactory, Cave, IGarage)  # should register a named adapter
-grok.global_adapter(NamedGarageFactory, Cave, IGarage, name=u'')  # should override component's name
+# should register a named adapter
+grok.global_adapter(NamedGarageFactory, Cave, IGarage)
+# should override component's name
+grok.global_adapter(NamedGarageFactory, Cave, IGarage, name=u'')



More information about the checkins mailing list