[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