[Checkins] SVN: Sandbox/pcardune/z3c.mvc/src/z3c/mvc/ make a controller directive.

Paul Carduner paulcarduner at gmail.com
Wed Feb 11 20:31:43 EST 2009


Log message for revision 96456:
  make a controller directive.

Changed:
  U   Sandbox/pcardune/z3c.mvc/src/z3c/mvc/meta.zcml
  U   Sandbox/pcardune/z3c.mvc/src/z3c/mvc/zcml.py

-=-
Modified: Sandbox/pcardune/z3c.mvc/src/z3c/mvc/meta.zcml
===================================================================
--- Sandbox/pcardune/z3c.mvc/src/z3c/mvc/meta.zcml	2009-02-11 22:41:30 UTC (rev 96455)
+++ Sandbox/pcardune/z3c.mvc/src/z3c/mvc/meta.zcml	2009-02-12 01:31:43 UTC (rev 96456)
@@ -5,11 +5,23 @@
   <meta:directives namespace="http://namespaces.zope.org/z3c">
 
     <meta:directive
-        name="mvcTemplate"
-        schema="z3c.template.zcml.ITemplateDirective"
-        handler=".zcml.templateDirective"
+        name="mvcView"
+        schema=".zcml.IViewDirective"
+        handler=".zcml.viewDirective"
         />
 
+    <meta:directive
+        name="mvcController"
+        schema=".zcml.IControllerDirective"
+        handler=".zcml.controllerDirective"
+        />
+
+    <!--meta:directive
+        name="mvcController"
+        schema="z3c.pagelet.zcml.IControllerDirective"
+        handler="z3c.pagelet.zcml.pageletDirective"
+        /-->
+
   </meta:directives>
 
 </configure>

Modified: Sandbox/pcardune/z3c.mvc/src/z3c/mvc/zcml.py
===================================================================
--- Sandbox/pcardune/z3c.mvc/src/z3c/mvc/zcml.py	2009-02-11 22:41:30 UTC (rev 96455)
+++ Sandbox/pcardune/z3c.mvc/src/z3c/mvc/zcml.py	2009-02-12 01:31:43 UTC (rev 96456)
@@ -20,33 +20,92 @@
 
 import zope.interface
 import zope.component.zcml
+import zope.configuration.fields
+import zope.security.zcml
 from zope.configuration.exceptions import ConfigurationError
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+from zope.app.component.back35 import LayerField
+from zope.app.publisher.browser import viewmeta
+from zope.app.component.metadirectives import IBasicViewInformation
 
 import z3c.template.interfaces
+from z3c.pagelet.interfaces import IPagelet
+from z3c.pagelet.browser import BrowserPagelet
+from z3c.pagelet.zcml import pageletDirective, IPageletDirective
 
 from z3c.mvc.template import TemplateFactory
 from z3c.mvc.interfaces import IModelTemplate
 
+class IControllerDirective(IPageletDirective):
 
-def templateDirective(
-    _context, template, name=u'',
-    for_=zope.interface.Interface, layer=IDefaultBrowserLayer,
+    permission = zope.security.zcml.Permission(
+        title=u"Permission",
+        description=u"The permission needed to use the pagelet.",
+        required=False,
+        )
+
+    view = zope.configuration.fields.Path(
+        title=u'Layout template.',
+        description=u"Refers to a file containing a page template (should "
+                     "end in extension ``.pt`` or ``.html``).",
+        required=False,
+        )
+
+# Arbitrary keys and values are allowed to be passed to the pagelet.
+IControllerDirective.setTaggedValue('keyword_arguments', True)
+
+def controllerDirective(
+    _context, class_, name, permission="zope.Public", for_=zope.interface.Interface,
+    layer=IDefaultBrowserLayer, view=None, **kwargs):
+    pageletDirective(_context, class_, name, permission, for_=for_,
+                     layer=layer, provides=IPagelet,
+                     allowed_interface=None, allowed_attributes=None, **kwargs)
+
+    if view is not None:
+        viewDirective(_context, view, controller=class_, layer=layer)
+
+
+class IViewDirective(zope.interface.Interface):
+
+    view = zope.configuration.fields.Path(
+        title=u'Layout template.',
+        description=u"Refers to a file containing a page template (should "
+                     "end in extension ``.pt`` or ``.html``).",
+        required=True,
+        )
+
+    controller = zope.configuration.fields.GlobalObject(
+        title = u'View',
+        description = u'The view for which the template should be available',
+        default=zope.interface.Interface,
+        required = False,
+        )
+
+    layer = zope.configuration.fields.GlobalObject(
+        title = u'Layer',
+        description = u'The layer for which the template should be available',
+        required = False,
+        default=IDefaultBrowserLayer,
+        )
+
+def viewDirective(
+    _context, view, name=u'',
+    controller=zope.interface.Interface, layer=IDefaultBrowserLayer,
     provides=IModelTemplate,
     contentType='text/html', macro=None):
 
     # Make sure that the template exists
-    template = os.path.abspath(str(_context.path(template)))
-    if not os.path.isfile(template):
-        raise ConfigurationError("No such file", template)
+    view = os.path.abspath(str(_context.path(view)))
+    if not os.path.isfile(view):
+        raise ConfigurationError("No such file", view)
 
-    factory = TemplateFactory(template, contentType, macro)
+    factory = TemplateFactory(view, contentType, macro)
     zope.interface.directlyProvides(factory, provides)
 
-    # register the template
+    # register the view
     if name:
         zope.component.zcml.adapter(_context, (factory,), provides,
-                                    (for_, layer), name=name)
+                                    (controller, layer), name=name)
     else:
         zope.component.zcml.adapter(_context, (factory,), provides,
-                                    (for_, layer))
+                                    (controller, layer))



More information about the Checkins mailing list