[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