[Checkins] SVN: grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/ Get most of the tests working by making use of directive.get() wherever possible. Ripped out no-longer needed stuff.

Philipp von Weitershausen philikon at philikon.de
Fri May 2 18:37:49 EDT 2008


Log message for revision 86148:
  Get most of the tests working by making use of directive.get() wherever possible.  Ripped out no-longer needed stuff.

Changed:
  U   grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/directive.py
  U   grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/meta.py
  U   grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/tests/test_grok.py
  D   grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/tests/util/
  U   grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/util.py

-=-
Modified: grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/directive.py
===================================================================
--- grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/directive.py	2008-05-02 22:33:27 UTC (rev 86147)
+++ grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/directive.py	2008-05-02 22:37:49 UTC (rev 86148)
@@ -14,21 +14,9 @@
 """Grok directives.
 """
 import grokcore.component
-
 from zope.interface.interfaces import IInterface
 
 from martian.error import GrokImportError
-from martian.directive import (OnceDirective,
-                               MultipleTimesDirective,
-                               SingleTextDirective,
-                               MarkerDirective,
-                               InterfaceDirective,
-                               InterfaceOrClassDirective,
-                               ModuleDirectiveContext,
-                               OptionalValueDirective,
-                               ClassDirectiveContext,
-                               ClassOrModuleDirectiveContext)
-from martian import util
 from martian import ndir
 from martian.ndir import baseclass
 
@@ -43,6 +31,7 @@
         return GlobalUtilityInfo(factory, provides, name, direct)
 
 class GlobalUtilityInfo(object):
+
     def __init__(self, factory, provides=None, name=u'', direct=None):
         self.factory = factory
         if direct is None:
@@ -54,7 +43,7 @@
         self.provides = provides
 
         if name is u'':
-            name = util.class_annotation(factory, 'grok.name', u'')
+            name = grokcore.component.name.get(factory)
         self.name = name
 
 class order(ndir.Directive):
@@ -70,11 +59,12 @@
         return super(order, self).factory(value)
 
     def default_value(self, component):
-        return 0, order._order
+        return 0, self._order
 
 class name(ndir.Directive):
     scope = ndir.CLASS
     store = ndir.ONCE
+    default = u''
     validate = ndir.validateText
 
 class context(ndir.Directive):

Modified: grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/meta.py
===================================================================
--- grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/meta.py	2008-05-02 22:33:27 UTC (rev 86147)
+++ grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/meta.py	2008-05-02 22:37:49 UTC (rev 86148)
@@ -13,40 +13,31 @@
 ##############################################################################
 """Grokkers for the various components."""
 
-import martian
+import martian.util
 import grokcore.component
 import zope.component.interface
 
 from zope import component, interface
-from martian import util
 from martian.error import GrokError
 from grokcore.component.util import check_adapts
 from grokcore.component.util import check_module_component
 from grokcore.component.util import determine_module_component
-from grokcore.component.util import determine_class_component
 from grokcore.component.util import check_provides_one
 from grokcore.component import directive
 
-def get_context(module_info, factory):
-    return determine_class_component(module_info, factory,
-                                     'context', 'grok.context')
+def get_context(factory, module_info):
+    component = directive.context.get(factory, module_info.getModule())
+    check_module_component(factory, component, 'context', directive.context)
+    return component
 
 def get_name_classname(factory):
     return get_name(factory, factory.__name__.lower())
 
-def get_name(factory, default=''):
-    return grokcore.component.util.class_annotation(factory, 'grok.name',
-                                                    default)
-
-def get_title(factory, default=''):
-    return grokcore.component.util.class_annotation(factory, 'grok.title',
-                                                    default)
-
 def get_provides(factory):
     provides = directive.provides.get(factory)
 
     if provides is None:
-        util.check_implements_one(factory)
+        martian.util.check_implements_one(factory)
         provides = list(interface.implementedBy(factory))[0]
     return provides
 
@@ -56,9 +47,12 @@
     priority = 1001
 
     def grok(self, name, module, module_info, config, **kw):
-        context = determine_module_component(module_info, 'grok.context',
+        context = determine_module_component(module_info, directive.context,
                                              [grokcore.component.Context])
-        module.__grok_context__ = context
+        # XXX this depends on the particular implementation of the
+        # directive storages :(
+        dotted_name = 'grokcore.component.directive.context'
+        setattr(module, dotted_name, context)
         return True
 
 
@@ -66,9 +60,9 @@
     component_class = grokcore.component.Adapter
 
     def grok(self, name, factory, module_info, config, **kw):
-        adapter_context = get_context(module_info, factory)
+        adapter_context = get_context(factory, module_info)
         provides = get_provides(factory)
-        name = get_name(factory)
+        name = directive.name.get(factory)
 
         config.action(
             discriminator=('adapter', adapter_context, provides, name),
@@ -83,7 +77,7 @@
 
     def grok(self, name, factory, module_info, config, **kw):
         provides = get_provides(factory)
-        name = get_name(factory)
+        name = directive.name.get(factory)
 
         check_adapts(factory)
         for_ = component.adaptedBy(factory)
@@ -106,7 +100,7 @@
     def grok(self, name, factory, module_info, config, **kw):
         provides = directive.provides.get(factory)
         direct = directive.direct.get(factory)
-        name = get_name(factory)
+        name = directive.name.get(factory)
 
         if direct:
             obj = factory
@@ -129,15 +123,15 @@
 class AdapterDecoratorGrokker(martian.GlobalGrokker):
 
     def grok(self, name, module, module_info, config, **kw):
-        context = module_info.getAnnotation('grok.context', None)
+        context = directive.context.get(module)
         implementers = module_info.getAnnotation('implementers', [])
         for function in implementers:
             interfaces = getattr(function, '__component_adapts__', None)
             if interfaces is None:
                 # There's no explicit interfaces defined, so we assume the
                 # module context to be the thing adapted.
-                check_module_component(module_info.getModule(), context,
-                                       'context', 'grok.context')
+                check_module_component(function, context, 'context',
+                                       directive.context)
                 interfaces = (context, )
 
             config.action(

Modified: grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/tests/test_grok.py
===================================================================
--- grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/tests/test_grok.py	2008-05-02 22:33:27 UTC (rev 86147)
+++ grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/tests/test_grok.py	2008-05-02 22:37:49 UTC (rev 86148)
@@ -46,7 +46,7 @@
 def test_suite():
     suite = unittest.TestSuite()
     for name in ['adapter', 'directive', 'grokker', 'order', 'testsetup',
-                 'util', 'utility', 'view', 'event']:
+                 'utility', 'view', 'event']:
         suite.addTest(suiteFromPackage(name))
     return suite
 

Modified: grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/util.py
===================================================================
--- grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/util.py	2008-05-02 22:33:27 UTC (rev 86147)
+++ grokcore.component/branches/jw-philipp-using-ndir-directives/src/grokcore/component/util.py	2008-05-02 22:37:49 UTC (rev 86148)
@@ -14,10 +14,11 @@
 """Grok utility functions.
 """
 
+import grokcore.component
 from zope import component, interface
 
 from martian.error import GrokError
-from martian.util import class_annotation, methods_from_class, scan_for_classes
+from martian.util import methods_from_class, scan_for_classes
 
 def check_adapts(class_):
     if component.adaptedBy(class_) is None:
@@ -25,23 +26,8 @@
                         "(use grok.adapts to specify)."
                         % class_, class_)
 
-def determine_class_directive(directive_name, factory, module_info,
-                              default=None):
-    directive = class_annotation(factory, directive_name, None)
-    if directive is None:
-        directive = module_info.getAnnotation(directive_name, None)
-    if directive is not None:
-        return directive
-    return default
-
-def public_methods_from_class(factory):
-    return [m for m in methods_from_class(factory) if \
-            not m.__name__.startswith('_')]
-
 def _sort_key(component):
-    explicit_order, implicit_order = class_annotation(component,
-                                                      'grok.order',
-                                                      (0,0))
+    explicit_order, implicit_order = grokcore.component.order.get(component)
     return (explicit_order,
             component.__module__,
             implicit_order,
@@ -52,8 +38,7 @@
     return sorted(components, key=_sort_key)
 
 AMBIGUOUS_COMPONENT = object()
-def check_module_component(factory, component,
-                           component_name, component_directive):
+def check_module_component(factory, component, component_name, directive):
     """Raise error if module-level component cannot be determined.
 
     If the module-level component is None, it's never been specified;
@@ -63,15 +48,17 @@
     an error telling developer to specify which one to use.
     """
     if component is None:
-        raise GrokError("No module-level %s for %r, please use "
-                        "%s." % (component_name, factory, component_directive),
+        raise GrokError("No module-level %s for %r, please use the '%s' "
+                        "directive."
+                        % (component_name, factory, directive.__name__),
                         factory)
     elif component is AMBIGUOUS_COMPONENT:
-        raise GrokError("Multiple possible %ss for %r, please use "
-                        "%s." % (component_name, factory, component_directive),
+        raise GrokError("Multiple possible %ss for %r, please use the '%s' "
+                        "directive."
+                        % (component_name, factory, directive.__name__),
                         factory)
 
-def determine_module_component(module_info, annotation, classes):
+def determine_module_component(module_info, directive, classes):
     """Determine module-level component.
 
     The module-level component can be set explicitly using the
@@ -88,7 +75,8 @@
     If there are more than one module-level component, AMBIGUOUS_COMPONENT
     is returned.
     """
-    components = scan_for_classes(module_info.getModule(), classes)
+    module = module_info.getModule()
+    components = scan_for_classes(module, classes)
     if len(components) == 0:
         component = None
     elif len(components) == 1:
@@ -96,25 +84,12 @@
     else:
         component= AMBIGUOUS_COMPONENT
 
-    module_component = module_info.getAnnotation(annotation, None)
-    if module_component:
+    module_component = directive.get(module)
+    if module_component is not None:
         component = module_component
     return component
 
 
-def determine_class_component(module_info, class_,
-                              component_name, component_directive):
-    """Determine component for a class.
-
-    Determine a component for a class. If no class-specific component exists,
-    try falling back on module-level component.
-    """
-    module_component = module_info.getAnnotation(component_directive, None)
-    component = class_annotation(class_, component_directive, module_component)
-    check_module_component(class_, component,
-                           component_name, component_directive)
-    return component
-
 def check_provides_one(obj):
     provides = list(interface.providedBy(obj))
     if len(provides) < 1:



More information about the Checkins mailing list