[Checkins] SVN: grok/branches/snowsprint-viewlets2/src/grok/
Refactor viewlet support. It's still not sufficiently tested,
but it's
Martijn Faassen
faassen at infrae.com
Thu Jan 24 08:26:16 EST 2008
Log message for revision 83164:
Refactor viewlet support. It's still not sufficiently tested, but it's
a lot cleaner than it was before.
Changed:
U grok/branches/snowsprint-viewlets2/src/grok/meta.py
U grok/branches/snowsprint-viewlets2/src/grok/templatereg.py
-=-
Modified: grok/branches/snowsprint-viewlets2/src/grok/meta.py
===================================================================
--- grok/branches/snowsprint-viewlets2/src/grok/meta.py 2008-01-24 13:06:13 UTC (rev 83163)
+++ grok/branches/snowsprint-viewlets2/src/grok/meta.py 2008-01-24 13:26:16 UTC (rev 83164)
@@ -248,7 +248,7 @@
config.action(
discriminator=None,
callable=templates.checkTemplates,
- args=(module_info, factory, factory.__name__.lower())
+ args=(module_info, factory)
)
# safety belt: make sure that the programmer didn't use
@@ -878,103 +878,54 @@
component_class = grok.ViewletManager
def grok(self, name, factory, module_info, config, **kw):
+ factory.module_info = module_info
+
+ name = get_name(factory)
+ view_context = get_context(module_info, factory)
- factory.module_info = module_info # to make /static available
-
- name = grok.util.class_annotation(factory, 'grok.name', factory.__name__.lower())
- view_layer = util.class_annotation(factory, 'grok.layer',
- None) or module_info.getAnnotation('grok.layer',
- None) or IDefaultBrowserLayer
-
- context = module_info.getAnnotation('grok.context', interface.Interface)
- view_context = util.determine_class_context(factory, context)
-
- # content providers can be associated with a view as well
- # we default to all views, or IBrowserView
- view = grok.util.class_annotation(factory, 'grok.view', IBrowserView)
-
+ view = determine_class_directive('grok.view', factory,
+ module_info, default=IBrowserView)
view_layer = determine_class_directive('grok.layer', factory,
module_info,
default=IDefaultBrowserLayer)
- # TODO - manager is registered for IBrowserView instead of the real view
config.action(
discriminator = ('viewletManager', view_context, view_layer,
view, name),
callable = component.provideAdapter,
- args = (factory, (interface.Interface, view_layer, view),
+ args = (factory, (view_context, view_layer, view),
IViewletManager, name)
)
- permission = get_default_permission(factory)
- config.action(
- discriminator=('protectName', factory, '__call__'),
- callable=make_checker,
- args=(factory, factory, permission),
- )
-
return True
class ViewletGrokker(martian.ClassGrokker):
component_class = grok.Viewlet
def grok(self, name, factory, module_info, config, **kw):
- # Try to set up permissions (copied from the View grokker)
-
factory.module_info = module_info # to make /static available
- factory_name = factory.__name__.lower()
+ view_context = get_context(module_info, factory)
+
# find templates
- template_name = util.class_annotation(factory, 'grok.template',
- factory_name)
templates = module_info.getAnnotation('grok.templates', None)
- template = templates.get(template_name)
-
- if factory_name != template_name:
- # grok.template is being used
- if templates.get(factory_name):
- raise GrokError("Multiple possible templates for view %r. It "
- "uses grok.template('%s'), but there is also "
- "a template called '%s'."
- % (factory, template_name, factory_name),
- factory)
-
- factory_template = getattr(factory,'template', None)
-
- if template:
- if (getattr(factory, 'render', None) and not
- util.check_subclass(factory, components.GrokForm) and not
- util.check_subclass(factory, components.Viewlet)):
- # we do not accept render and template both for a view
- # (unless it's a form, they happen to have render.)
- # Forms currently not implemented in viewlets.
- raise GrokError(
- "Multiple possible ways to render view %r. "
- "It has both a 'render' method as well as "
- "an associated template." % factory, factory)
-
- templates.markAssociated(template_name)
- factory.template = template
- elif factory_template and isinstance(factory_template, (components.PageTemplate, components.PageTemplateFile)):
- pass
- else:
- if not getattr(factory, 'render', None):
- # we do not accept a view without any way to render it
- raise GrokError("View %r has no associated template or "
- "'render' method." % factory, factory)
-
- context = module_info.getAnnotation('grok.context', interface.Interface)
- view_context = util.determine_class_context(factory, context)
-
- # content providers can be associated with a view as well
- # we default to all views, or IBrowserView
- view = grok.util.class_annotation(factory, 'grok.view', IBrowserView)
-
- viewletmanager = grok.util.class_annotation(factory, 'grok.viewletmanager', [])
- view_layer = util.class_annotation(factory, 'grok.layer',
- None) or module_info.getAnnotation('grok.layer',
- None) or IDefaultBrowserLayer
-
+ if templates is not None:
+ config.action(
+ discriminator=None,
+ callable=templates.checkTemplates,
+ args=(module_info, factory))
+
+ view = determine_class_directive('grok.view', factory,
+ module_info, default=IBrowserView)
+ view_layer = determine_class_directive('grok.layer', factory,
+ module_info,
+ default=IDefaultBrowserLayer)
+ viewletmanager = determine_class_directive('grok.viewletmanager',
+ factory, module_info,
+ None)
+ if viewletmanager is None:
+ raise GrokError("XXX This is a temporary grok error")
+
config.action(
discriminator = ('viewlet', view_context, view_layer,
view, viewletmanager, name),
@@ -989,5 +940,5 @@
callable=make_checker,
args=(factory, factory, permission, ['update', 'render']),
)
-
+
return True
Modified: grok/branches/snowsprint-viewlets2/src/grok/templatereg.py
===================================================================
--- grok/branches/snowsprint-viewlets2/src/grok/templatereg.py 2008-01-24 13:06:13 UTC (rev 83163)
+++ grok/branches/snowsprint-viewlets2/src/grok/templatereg.py 2008-01-24 13:26:16 UTC (rev 83164)
@@ -81,7 +81,8 @@
module_info.dotted_name, ', '.join(unassociated)))
warnings.warn(msg, UserWarning, 2)
- def checkTemplates(self, module_info, factory, factory_name):
+ def checkTemplates(self, module_info, factory):
+ factory_name = factory.__name__.lower()
template_name = util.class_annotation(factory, 'grok.template',
factory_name)
More information about the Checkins
mailing list