[Checkins]
SVN: grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/meta.py
More science fiction and a rough sketch of the underlying
implementation.
Philipp von Weitershausen
philikon at philikon.de
Mon May 5 05:31:52 EDT 2008
Log message for revision 86437:
More science fiction and a rough sketch of the underlying implementation.
Changed:
U grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/meta.py
-=-
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-05 09:06:43 UTC (rev 86436)
+++ grokcore.component/branches/philikon-decl-dir-rules/src/grokcore/component/meta.py 2008-05-05 09:31:52 UTC (rev 86437)
@@ -100,12 +100,15 @@
# happens, since it relies on the ITemplateFileFactories being grokked.
priority = 1100
- class directives:
- direct = grokcore.component.direct.bind()
- provides = grokcore.component.provides.bind(
- default_global_utility_provides)
- name = grokcore.component.name.bind()
+ directives = [
+ grokcore.component.direct.bind(),
+ grokcore.component.provides.bind(
+ get_default=default_global_utility_provides),
+ grokcore.component.provides.bind(default=IFoo),
+ grokcore.component.name.bind(),
+ ]
+
def register(self, factory, config, direct, provides, name):
if not direct:
factory = factory()
@@ -118,6 +121,46 @@
return True
+ def grok(self, name, factory, module_info, config, **kw):
+ module = module_info.getModule()
+
+ # Populate the data dict with information from the directives:
+ data = {}
+ for bound_directive in self.directives:
+ data[dirname] = bound_directive.get(factory, module, **data)
+ return self.register(factory, config, **data)
+
+
+class Directive(...):
+
+ @classmethod
+ def bind(cls, default=None, get_default=None, name=None):
+ return BoundDirective(cls, default, get_default, name)
+
+
+class BoundDirective(object):
+
+ def __init__(self, directive, default=None, get_default=None, name=None):
+ self.directive = directive
+ self.default = default
+ if name is None:
+ name = directive.__name__
+ self.name = name
+ if get_default is not None:
+ self.get_default = get_default
+
+ def get_default(self, component, module, **data):
+ if self.default is not None:
+ return self.default
+ return self.directive.default
+
+ def get(self, component, module, **data):
+ value = self.directive.get(component, module, default=_DEFAULT)
+ if value is _DEFAULT:
+ value = self.get_default(component, module, **data)
+ return value
+
+
class AdapterDecoratorGrokker(martian.GlobalGrokker):
def grok(self, name, module, module_info, config, **kw):
More information about the Checkins
mailing list