[Checkins] SVN: grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/ Need to use the 'module' keywd parameter whenever we want to get things

Philipp von Weitershausen philikon at philikon.de
Fri May 9 20:05:33 EDT 2008


Log message for revision 86593:
  Need to use the 'module' keywd parameter whenever we want to get things
  from a module.
  

Changed:
  U   grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/directive.py
  U   grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/meta.py
  U   grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/scan.py
  U   grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/tests/directive/multipletimes.py

-=-
Modified: grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/directive.py
===================================================================
--- grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/directive.py	2008-05-10 00:02:26 UTC (rev 86592)
+++ grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/directive.py	2008-05-10 00:05:32 UTC (rev 86593)
@@ -18,7 +18,7 @@
 import grokcore.component
 from zope.interface.interfaces import IInterface
 from martian.error import GrokImportError
-from grokcore.component.scan import check_module_component
+from grokcore.component.scan import UnambiguousComponentScope
 
 class global_utility(martian.MultipleTimesDirective):
     scope = martian.MODULE
@@ -44,17 +44,10 @@
     validate = martian.validateText
 
 class context(martian.Directive):
-    scope = martian.CLASS_OR_MODULE
+    scope = UnambiguousComponentScope('context')
     store = martian.ONCE
     validate = martian.validateInterfaceOrClass
 
-    @classmethod
-    def check_value(cls, value, component, module=None, **data):
-        if not isinstance(component, types.ModuleType):
-            # 'component' must be a class then, so let's make sure
-            # that the context is not ambiguous or None.
-            check_module_component(component, value, 'context', cls)    
-
 class title(martian.Directive):
     scope = martian.CLASS
     store = martian.ONCE

Modified: grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/meta.py
===================================================================
--- grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/meta.py	2008-05-10 00:02:26 UTC (rev 86592)
+++ grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/meta.py	2008-05-10 00:05:32 UTC (rev 86593)
@@ -25,21 +25,6 @@
 from grokcore.component.interfaces import IContext
 
 
-class ClassGrokker(martian.ClassGrokker):
-
-    def grok(self, name, class_, module_info, config, **kw):
-        module = module_info.getModule()
-
-        # Populate the data dict with information from the directives:
-        data = {}
-        for directive in self.directives:
-            data[directive.name] = directive.get(class_, module, **data)
-        return self.register(class_, config, **data)
-
-    def register(self, class_, config, **data):
-        raise NotImplementedError
-
-
 def default_provides(factory, module=None, **data):
     martian.util.check_implements_one(factory)
     return list(interface.implementedBy(factory))[0]
@@ -63,7 +48,7 @@
         return True
 
 
-class AdapterGrokker(ClassGrokker):
+class AdapterGrokker(martian.ClassGrokker):
     component_class = grokcore.component.Adapter
 
     directives = [
@@ -72,7 +57,7 @@
         grokcore.component.name.bind(),
         ]
 
-    def register(self, factory, config, context, provides, name):
+    def execute(self, factory, config, context, provides, name, **kw):
         config.action(
             discriminator=('adapter', context, provides, name),
             callable=component.provideAdapter,
@@ -81,7 +66,7 @@
         return True
 
 
-class MultiAdapterGrokker(ClassGrokker):
+class MultiAdapterGrokker(martian.ClassGrokker):
     component_class = grokcore.component.MultiAdapter
 
     directives = [
@@ -89,7 +74,7 @@
         grokcore.component.name.bind(),
         ]
 
-    def register(self, factory, config, provides, name):
+    def execute(self, factory, config, provides, name, **kw):
         if component.adaptedBy(factory) is None:
             raise GrokError("%r must specify which contexts it adapts "
                             "(use the 'adapts' directive to specify)."
@@ -104,7 +89,7 @@
         return True
 
 
-class GlobalUtilityGrokker(ClassGrokker):
+class GlobalUtilityGrokker(martian.ClassGrokker):
     component_class = grokcore.component.GlobalUtility
 
     # This needs to happen before the FilesystemPageTemplateGrokker grokker
@@ -118,7 +103,7 @@
         grokcore.component.name.bind(),
         ]
 
-    def register(self, factory, config, direct, provides, name):
+    def execute(self, factory, config, direct, provides, name, **kw):
         if not direct:
             factory = factory()
 
@@ -132,7 +117,7 @@
 class AdapterDecoratorGrokker(martian.GlobalGrokker):
 
     def grok(self, name, module, module_info, config, **kw):
-        context = grokcore.component.context.bind().get(module)
+        context = grokcore.component.context.bind().get(module=module)
         implementers = module_info.getAnnotation('implementers', [])
         for function in implementers:
             interfaces = getattr(function, '__component_adapts__', None)
@@ -154,7 +139,7 @@
 class GlobalUtilityDirectiveGrokker(martian.GlobalGrokker):
 
     def grok(self, name, module, module_info, config, **kw):
-        infos = grokcore.component.global_utility.bind().get(module)
+        infos = grokcore.component.global_utility.bind().get(module=module)
 
         for factory, provides, name, direct in infos:
             if direct:

Modified: grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/scan.py
===================================================================
--- grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/scan.py	2008-05-10 00:02:26 UTC (rev 86592)
+++ grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/scan.py	2008-05-10 00:05:32 UTC (rev 86593)
@@ -16,6 +16,7 @@
 
 from martian.error import GrokError
 from martian.util import scan_for_classes
+from martian.directive import ClassOrModuleScope
 
 AMBIGUOUS_COMPONENT = object()
 def check_module_component(factory, component, component_name, directive):
@@ -64,7 +65,30 @@
     else:
         component= AMBIGUOUS_COMPONENT
 
-    module_component = directive.bind().get(module)
+    module_component = directive.bind().get(module=module)
     if module_component is not None:
         component = module_component
     return component
+
+
+class UnambiguousComponentScope(ClassOrModuleScope):
+
+    def __init__(self, name):
+        self.name = name
+
+    def get(self, directive, component, module, default):
+        value = default
+        if component is not None:
+            value = directive.store.get(directive, component, default)
+        if value is default and module is not None:
+            value = directive.store.get(directive, module, default)
+
+        # When both 'component' and 'module' where passed in, perform
+        # a check for ambiguous components.
+        if None not in (component, module):
+            value_to_check = value
+            if value_to_check is default:
+                value_to_check = None
+            check_module_component(component, value_to_check, self.name,
+                                   directive)
+        return value

Modified: grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/tests/directive/multipletimes.py
===================================================================
--- grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/tests/directive/multipletimes.py	2008-05-10 00:02:26 UTC (rev 86592)
+++ grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/tests/directive/multipletimes.py	2008-05-10 00:05:32 UTC (rev 86593)
@@ -6,7 +6,7 @@
   >>> from martian import scan
   >>> import grokcore.component as grok
   >>> from grokcore.component.tests.directive import multipletimes
-  >>> guis = grok.global_utility.bind().get(multipletimes)
+  >>> guis = grok.global_utility.bind().get(module=multipletimes)
   >>> len(guis)
   2
 



More information about the Checkins mailing list