[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