[Checkins] SVN: grokcore.component/trunk/ fix global_adapter directive and grokker to allow for an explicit nameless registration even if the factory has a grok.name set
Jan-Wijbrand Kolman
janwijbrand at gmail.com
Wed Apr 27 05:03:39 EDT 2011
Log message for revision 121468:
fix global_adapter directive and grokker to allow for an explicit nameless registration even if the factory has a grok.name set
Changed:
U grokcore.component/trunk/CHANGES.txt
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 2011-04-27 08:38:44 UTC (rev 121467)
+++ grokcore.component/trunk/CHANGES.txt 2011-04-27 09:03:38 UTC (rev 121468)
@@ -4,9 +4,11 @@
2.4 (unreleased)
----------------
-- Nothing changed yet.
+- Fix the `global_adapter` directive implementation to accept an explicit
+ "empty" name for nameless adapter registrations (as it used to be that
+ providing an empty name in the registration would actually result in
+ registering a named adapter in case the factory has a `grok.name`).
-
2.3 (2011-02-14)
----------------
Modified: grokcore.component/trunk/src/grokcore/component/directive.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/directive.py 2011-04-27 08:38:44 UTC (rev 121467)
+++ grokcore.component/trunk/src/grokcore/component/directive.py 2011-04-27 09:03:38 UTC (rev 121468)
@@ -66,7 +66,7 @@
"""
scope = martian.MODULE
- def factory(self, factory, adapts=None, provides=None, name=u''):
+ def factory(self, factory, adapts=None, provides=None, name=None):
if provides is not None and not IInterface.providedBy(provides):
raise GrokImportError(
"You can only pass an interface to the "
Modified: grokcore.component/trunk/src/grokcore/component/meta.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/meta.py 2011-04-27 08:38:44 UTC (rev 121467)
+++ grokcore.component/trunk/src/grokcore/component/meta.py 2011-04-27 09:03:38 UTC (rev 121468)
@@ -199,7 +199,7 @@
adapts = getattr(factory, '__component_adapts__', None)
if adapts is None:
adapts = grokcore.component.context.bind().get(factory)
- if not name:
+ if name is None:
name = grokcore.component.name.bind().get(factory)
config.action(
Modified: grokcore.component/trunk/src/grokcore/component/tests/adapter/globaladapter.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/tests/adapter/globaladapter.py 2011-04-27 08:38:44 UTC (rev 121467)
+++ grokcore.component/trunk/src/grokcore/component/tests/adapter/globaladapter.py 2011-04-27 09:03:38 UTC (rev 121468)
@@ -1,34 +1,42 @@
"""
>>> grok.testing.grok(__name__)
>>> from zope.component import getAdapter, getMultiAdapter
-
+
>>> cave = Cave()
>>> fireplace = Fireplace()
-
+
>>> home = IHome(cave)
>>> home.id
u'one'
-
+
>>> home = getAdapter(cave, IHome, name=u"two")
>>> home.id
u'two'
-
+
>>> home = getAdapter(cave, IHome, name=u"three")
>>> home.id
u'three'
-
+
>>> home = getAdapter(cave, IHome, name=u"four")
>>> home.id
u'four'
-
+
>>> home = getAdapter(fireplace, IHome, name=u"five")
>>> home.id
u'five'
-
+
>>> home = getMultiAdapter((cave, fireplace), IHome)
>>> home.id
u'six'
-
+
+ >>> garage = getAdapter(cave, IGarage, name='named_garage_factory_name')
+ >>> garage.id
+ u"I'm a garage"
+
+ >>> garage = getAdapter(cave, IGarage)
+ >>> garage.id
+ u"I'm a garage"
+
"""
import grokcore.component as grok
@@ -46,23 +54,23 @@
class Home(object):
grok.implements(IHome)
-
+
def __init__(self, id):
self.id = id
class CaveHomeFactory(object):
grok.implements(IHome)
-
+
def __init__(self, id):
self.id = id
-
+
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)
@@ -82,9 +90,24 @@
grok.adapter(Fireplace)(factory5)
-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
+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
+
+class IGarage(interface.Interface):
+ pass
+
+class NamedGarageFactory(object):
+ grok.implements(IGarage)
+ grok.name('named_garage_factory_name')
+
+ def __init__(self, context):
+ self.id = u"I'm a garage"
+
+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
More information about the checkins
mailing list