[Checkins] SVN: grokcore.component/trunk/ define the common default value computation for context and provides in the directives themselves
Jan-Wijbrand Kolman
janwijbrand at gmail.com
Wed Nov 3 07:58:35 EDT 2010
Log message for revision 118151:
define the common default value computation for context and provides in the directives themselves
Changed:
U grokcore.component/trunk/buildout.cfg
U grokcore.component/trunk/setup.py
U grokcore.component/trunk/src/grokcore/component/directive.py
U grokcore.component/trunk/src/grokcore/component/meta.py
-=-
Modified: grokcore.component/trunk/buildout.cfg
===================================================================
--- grokcore.component/trunk/buildout.cfg 2010-11-03 11:56:51 UTC (rev 118150)
+++ grokcore.component/trunk/buildout.cfg 2010-11-03 11:58:35 UTC (rev 118151)
@@ -6,8 +6,7 @@
extensions = buildout.dumppickedversions
[versions]
-martian = 0.12
-grokcore.component =
+grokcore.component =
[interpreter]
recipe = zc.recipe.egg
Modified: grokcore.component/trunk/setup.py
===================================================================
--- grokcore.component/trunk/setup.py 2010-11-03 11:56:51 UTC (rev 118150)
+++ grokcore.component/trunk/setup.py 2010-11-03 11:58:35 UTC (rev 118151)
@@ -36,7 +36,7 @@
include_package_data=True,
zip_safe=False,
install_requires=['setuptools',
- 'martian >= 0.12',
+ 'martian >= 0.14',
'zope.component',
'zope.configuration',
'zope.interface',
Modified: grokcore.component/trunk/src/grokcore/component/directive.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/directive.py 2010-11-03 11:56:51 UTC (rev 118150)
+++ grokcore.component/trunk/src/grokcore/component/directive.py 2010-11-03 11:58:35 UTC (rev 118151)
@@ -14,10 +14,13 @@
"""Grok directives.
"""
import martian
+import martian.util
+from martian.error import GrokError, GrokImportError
+from martian.util import scan_for_classes
+from zope import interface
from zope.interface.interfaces import IInterface
-from martian.error import GrokImportError
+from grokcore.component.interfaces import IContext
-
class global_utility(martian.MultipleTimesDirective):
scope = martian.MODULE
@@ -46,14 +49,30 @@
class name(martian.Directive):
scope = martian.CLASS
store = martian.ONCE
+ validate = martian.validateText
default = u''
- validate = martian.validateText
class context(martian.Directive):
scope = martian.CLASS_OR_MODULE
store = martian.ONCE
validate = martian.validateInterfaceOrClass
+ @classmethod
+ def get_default(cls, component, module=None, **data):
+ components = list(scan_for_classes(module, IContext))
+ if len(components) == 0:
+ raise GrokError(
+ "No module-level context for %r, please use the 'context' "
+ "directive." % (component), component)
+ elif len(components) == 1:
+ component = components[0]
+ else:
+ raise GrokError(
+ "Multiple possible contexts for %r, please use the 'context' "
+ "directive."
+ % (component), component)
+ return component
+
class title(martian.Directive):
scope = martian.CLASS
store = martian.ONCE
@@ -85,3 +104,8 @@
scope = martian.CLASS
store = martian.ONCE
validate = martian.validateInterface
+
+ @classmethod
+ def get_default(cls, component, module, **data):
+ martian.util.check_implements_one(component)
+ return list(interface.implementedBy(component))[0]
Modified: grokcore.component/trunk/src/grokcore/component/meta.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/meta.py 2010-11-03 11:56:51 UTC (rev 118150)
+++ grokcore.component/trunk/src/grokcore/component/meta.py 2010-11-03 11:58:35 UTC (rev 118151)
@@ -17,48 +17,25 @@
import martian.util
import grokcore.component
import zope.component.interface
-
from zope import component, interface
from martian.error import GrokError
-from martian.util import scan_for_classes
-from grokcore.component.interfaces import IContext
+def _provides(component, module=None, **data):
+ martian.util.check_implements_one(component)
+ return list(interface.implementedBy(component))[0]
-
-def default_provides(factory, module=None, **data):
- martian.util.check_implements_one(factory)
- return list(interface.implementedBy(factory))[0]
-
-def default_global_utility_provides(factory, module, direct, **data):
+def default_global_utility_provides(component, module, direct, **data):
if direct:
- martian.util.check_provides_one(factory)
- return list(interface.providedBy(factory))[0]
- return default_provides(factory)
+ martian.util.check_provides_one(component)
+ return list(interface.providedBy(component))[0]
+ return _provides(component)
-def default_context(factory, module, **data):
- components = list(scan_for_classes(module, IContext))
- if len(components) == 0:
- raise GrokError(
- "No module-level context for %r, please use the 'context' "
- "directive." % (factory), factory)
- elif len(components) == 1:
- component = components[0]
- else:
- raise GrokError(
- "Multiple possible contexts for %r, please use the 'context' "
- "directive."
- % (factory), factory)
- return component
-
class AdapterGrokker(martian.ClassGrokker):
martian.component(grokcore.component.Adapter)
-
- martian.directive(grokcore.component.context,
- get_default=default_context)
- martian.directive(grokcore.component.provides,
- get_default=default_provides)
+ martian.directive(grokcore.component.context)
+ martian.directive(grokcore.component.provides)
martian.directive(grokcore.component.name)
-
+
def execute(self, factory, config, context, provides, name, **kw):
config.action(
discriminator=('adapter', context, provides, name),
@@ -67,12 +44,9 @@
)
return True
-
class MultiAdapterGrokker(martian.ClassGrokker):
martian.component(grokcore.component.MultiAdapter)
-
- martian.directive(grokcore.component.provides,
- get_default=default_provides)
+ martian.directive(grokcore.component.provides)
martian.directive(grokcore.component.name)
def execute(self, factory, config, provides, name, **kw):
@@ -89,7 +63,6 @@
)
return True
-
class GlobalUtilityGrokker(martian.ClassGrokker):
martian.component(grokcore.component.GlobalUtility)
@@ -120,8 +93,7 @@
for function in adapters:
interfaces = getattr(function, '__component_adapts__', None)
if interfaces is None:
- context = grokcore.component.context.bind(
- get_default=default_context).get(module)
+ context = grokcore.component.context.bind().get(module)
interfaces = (context, )
name = getattr(function, '__component_name__', u"")
config.action(
@@ -131,7 +103,6 @@
)
return True
-
class GlobalUtilityDirectiveGrokker(martian.GlobalGrokker):
def grok(self, name, module, module_info, config, **kw):
@@ -141,7 +112,8 @@
if direct is None:
direct = grokcore.component.direct.bind().get(factory)
if provides is None:
- provides = grokcore.component.provides.bind().get(factory)
+ bound = grokcore.component.provides.bind(default=None)
+ provides = bound.get(factory)
if not name:
name = grokcore.component.name.bind().get(factory)
@@ -153,7 +125,7 @@
else:
obj = factory()
if provides is None:
- provides = default_provides(factory)
+ provides = _provides(factory)
config.action(
discriminator=('utility', provides, name),
@@ -169,15 +141,15 @@
infos = grokcore.component.global_adapter.bind().get(module)
for factory, adapts, provides, name in infos:
if provides is None:
- provides = grokcore.component.provides.bind().get(factory)
+ 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_default=default_context).get(factory)
+ adapts = grokcore.component.context.bind().get(factory)
if not name:
name = grokcore.component.name.bind().get(factory)
-
+
config.action(
discriminator=('adapter', adapts, provides, name),
callable=component.provideAdapter,
More information about the checkins
mailing list