[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