[Checkins] SVN: grokcore.viewlet/trunk/src/grokcore/viewlet/ similar to getting the default value for the context directive, we needed to fix getting the default value for viewletmanagers
Jan-Wijbrand Kolman
janwijbrand at gmail.com
Mon Nov 1 14:24:50 EDT 2010
Log message for revision 118080:
similar to getting the default value for the context directive, we needed to fix getting the default value for viewletmanagers
Changed:
U grokcore.viewlet/trunk/src/grokcore/viewlet/directive.py
U grokcore.viewlet/trunk/src/grokcore/viewlet/meta.py
-=-
Modified: grokcore.viewlet/trunk/src/grokcore/viewlet/directive.py
===================================================================
--- grokcore.viewlet/trunk/src/grokcore/viewlet/directive.py 2010-11-01 18:16:44 UTC (rev 118079)
+++ grokcore.viewlet/trunk/src/grokcore/viewlet/directive.py 2010-11-01 18:24:49 UTC (rev 118080)
@@ -15,12 +15,8 @@
"""
import martian
-from grokcore.component.scan import UnambiguousComponentScope
-
class viewletmanager(martian.Directive):
- scope = UnambiguousComponentScope('viewletmanager')
+ scope = martian.CLASS_OR_MODULE
store = martian.ONCE
validate = martian.validateInterfaceOrClass
-
-
Modified: grokcore.viewlet/trunk/src/grokcore/viewlet/meta.py
===================================================================
--- grokcore.viewlet/trunk/src/grokcore/viewlet/meta.py 2010-11-01 18:16:44 UTC (rev 118079)
+++ grokcore.viewlet/trunk/src/grokcore/viewlet/meta.py 2010-11-01 18:24:49 UTC (rev 118080)
@@ -18,36 +18,29 @@
from zope.viewlet.interfaces import IViewletManager, IViewlet
import martian
+from martian.util import scan_for_classes
+from martian.error import GrokError
+import grokcore.component
+from grokcore.component.interfaces import IContext
+from grokcore.component.meta import default_context
+import grokcore.view
+import grokcore.security
+
import grokcore.viewlet
from grokcore.viewlet import components
from grokcore.viewlet.util import make_checker
from grokcore.viewlet.interfaces import IViewletManager as IGrokViewletManager
-from grokcore.component.scan import determine_module_component
-
from grokcore.view.meta.views import default_view_name
-class ViewletManagerContextGrokker(martian.GlobalGrokker):
-
- martian.priority(1001)
-
- def grok(self, name, module, module_info, config, **kw):
- viewletmanager = determine_module_component(
- module_info,
- grokcore.viewlet.viewletmanager,
- IGrokViewletManager)
- grokcore.viewlet.viewletmanager.set(module, viewletmanager)
- return True
-
-
class ViewletManagerGrokker(martian.ClassGrokker):
martian.component(grokcore.viewlet.ViewletManager)
- martian.directive(grokcore.viewlet.context)
- martian.directive(grokcore.viewlet.layer, default=IDefaultBrowserLayer)
+ martian.directive(grokcore.component.context, get_default=default_context)
+ martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
martian.directive(grokcore.viewlet.view)
- martian.directive(grokcore.viewlet.name, get_default=default_view_name)
+ martian.directive(grokcore.component.name, get_default=default_view_name)
def grok(self, name, factory, module_info, **kw):
# Need to store the module info object on the view class so that it
@@ -86,15 +79,30 @@
templates.checkTemplates(module_info, factory, 'viewlet manager',
has_render, has_no_render)
+def default_viewletmanager(factory, module, **data):
+ components = list(scan_for_classes(module, IGrokViewletManager))
+ if len(components) == 0:
+ raise GrokError(
+ "No module-level viewletmanager for %r, please use the "
+ "'viewletmanager' directive." % (factory), factory)
+ elif len(components) == 1:
+ component = components[0]
+ else:
+ raise GrokError(
+ "Multiple possible viewletmanagers for %r, please use the "
+ "'viewletmanager' directive."
+ % (factory), factory)
+ return component
class ViewletGrokker(martian.ClassGrokker):
martian.component(grokcore.viewlet.Viewlet)
- martian.directive(grokcore.viewlet.context)
- martian.directive(grokcore.viewlet.layer, default=IDefaultBrowserLayer)
+ martian.directive(grokcore.component.context, get_default=default_context)
+ martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
martian.directive(grokcore.viewlet.view)
- martian.directive(grokcore.viewlet.viewletmanager)
- martian.directive(grokcore.viewlet.name, get_default=default_view_name)
- martian.directive(grokcore.viewlet.require, name='permission')
+ martian.directive(
+ grokcore.viewlet.viewletmanager, get_default=default_viewletmanager)
+ martian.directive(grokcore.component.name, get_default=default_view_name)
+ martian.directive(grokcore.security.require, name='permission')
def grok(self, name, factory, module_info, **kw):
# Need to store the module info object on the view class so that it
More information about the checkins
mailing list