[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