[Checkins] SVN: z3c.ptcompat/trunk/src/z3c/ptcompat/ - Make zope.app.form directives optional

Sidnei da Silva sidnei at enfoldsystems.com
Tue Apr 7 00:04:57 EDT 2009


Log message for revision 98963:
  - Make zope.app.form directives optional

Changed:
  U   z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml
  U   z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py

-=-
Modified: z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml
===================================================================
--- z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml	2009-04-07 03:39:17 UTC (rev 98962)
+++ z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml	2009-04-07 04:04:56 UTC (rev 98963)
@@ -8,92 +8,99 @@
     <!-- browser pages -->
 
     <meta:directive
-       name="page"
-       schema="zope.app.publisher.browser.metadirectives.IPageDirective"
-       handler=".zcml.page_directive"
-       />
+	name="page"
+	schema="zope.app.publisher.browser.metadirectives.IPageDirective"
+	handler=".zcml.page_directive"
+	/>
 
     <meta:directive
-       name="viewlet"
-       schema="zope.viewlet.metadirectives.IViewletDirective"
-       handler=".zcml.viewlet_directive"
-       />
+	name="viewlet"
+	schema="zope.viewlet.metadirectives.IViewletDirective"
+	handler=".zcml.viewlet_directive"
+	/>
 
     <meta:directive
-       name="viewletManager"
-       schema="zope.viewlet.metadirectives.IViewletManagerDirective"
-       handler=".zcml.viewlet_manager_directive"
-       />
+	name="viewletManager"
+	schema="zope.viewlet.metadirectives.IViewletManagerDirective"
+	handler=".zcml.viewlet_manager_directive"
+	/>
 
 
-    <meta:complexDirective
-        name="form"
-        schema="zope.app.form.browser.metadirectives.IFormDirective"
-        handler=".zcml.FormDirective"
-        >
+    <configure zcml:condition="installed zope.app.form">
 
-      <meta:subdirective
-          name="widget"
-          schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
-          />
+      <!-- Those directives are only registered if zope.app.form is
+           available, to avoid a hard dependency -->
 
-    </meta:complexDirective>
+      <meta:complexDirective
+	  name="form"
+	  schema="zope.app.form.browser.metadirectives.IFormDirective"
+	  handler=".zcml.FormDirective"
+	  >
 
+	<meta:subdirective
+	    name="widget"
+	    schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
+	    />
 
-    <meta:complexDirective
-        name="editform"
-        schema="zope.app.form.browser.metadirectives.IEditFormDirective"
-        handler=".zcml.EditFormDirective"
-        >
+      </meta:complexDirective>
 
-      <meta:subdirective
-          name="widget"
-          schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
-          />
 
-    </meta:complexDirective>
+      <meta:complexDirective
+	  name="editform"
+	  schema="zope.app.form.browser.metadirectives.IEditFormDirective"
+	  handler=".zcml.EditFormDirective"
+	  >
 
+	<meta:subdirective
+	    name="widget"
+	    schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
+	    />
 
-    <meta:complexDirective
-        name="subeditform"
-        schema="zope.app.form.browser.metadirectives.ISubeditFormDirective"
-        handler=".zcml.SubeditFormDirective"
-        >
+      </meta:complexDirective>
 
-      <meta:subdirective
-          name="widget"
-          schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
-          />
 
-    </meta:complexDirective>
+      <meta:complexDirective
+	  name="subeditform"
+	  schema="zope.app.form.browser.metadirectives.ISubeditFormDirective"
+	  handler=".zcml.SubeditFormDirective"
+	  >
 
+	<meta:subdirective
+	    name="widget"
+	    schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
+	    />
 
-    <meta:complexDirective
-        name="addform"
-        schema="zope.app.form.browser.metadirectives.IAddFormDirective"
-        handler=".zcml.AddFormDirective"
-        >
+      </meta:complexDirective>
 
-      <meta:subdirective
-          name="widget"
-          schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
-          />
 
-    </meta:complexDirective>
+      <meta:complexDirective
+	  name="addform"
+	  schema="zope.app.form.browser.metadirectives.IAddFormDirective"
+	  handler=".zcml.AddFormDirective"
+	  >
 
+	<meta:subdirective
+	    name="widget"
+	    schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
+	    />
 
-    <meta:complexDirective
-        name="schemadisplay"
-        schema="zope.app.form.browser.metadirectives.ISchemaDisplayDirective"
-        handler=".zcml.SchemaDisplayDirective">
+      </meta:complexDirective>
 
-      <meta:subdirective
-          name="widget"
-          schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
-          />
 
-    </meta:complexDirective>
+      <meta:complexDirective
+	  name="schemadisplay"
+	  schema="zope.app.form.browser.metadirectives.ISchemaDisplayDirective"
+	  handler=".zcml.SchemaDisplayDirective">
 
+	<meta:subdirective
+	    name="widget"
+	    schema="zope.app.form.browser.metadirectives.IWidgetSubdirective"
+	    />
+
+      </meta:complexDirective>
+
+    </configure>
+
   </meta:directives>
 
 </configure>

Modified: z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py
===================================================================
--- z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py	2009-04-07 03:39:17 UTC (rev 98962)
+++ z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py	2009-04-07 04:04:56 UTC (rev 98963)
@@ -8,7 +8,6 @@
 from zope.viewlet.interfaces import IViewletManager
 from zope.app.publisher.browser import viewmeta
 from zope.app.pagetemplate import simpleviewclass
-from zope.app.form.browser import metaconfigure as formmeta
 
 from z3c.ptcompat import ViewPageTemplateFile
 from z3c.ptcompat import config
@@ -112,56 +111,63 @@
 
     return viewletmeta.viewletManagerDirective(_context, name, *args, **kwargs)
 
-if config.PREFER_Z3C_PT:
-    # Replace globals in *Factory by the ones from our package, cloning
-    # the existing functions so we don't have to re-define them.
-    new_factory_globals = dict(ViewPageTemplateFile=ViewPageTemplateFile,
-                               SimpleViewClass=SimpleViewClass)
+try:
+    # Make zope.app.form a soft-dependency. We only register custom
+    # directives if it is available.
+    from zope.app.form.browser import metaconfigure as formmeta
+except ImportError:
+    pass
+else:
+    if config.PREFER_Z3C_PT:
+        # Replace globals in *Factory by the ones from our package, cloning
+        # the existing functions so we don't have to re-define them.
+        new_factory_globals = dict(ViewPageTemplateFile=ViewPageTemplateFile,
+                                   SimpleViewClass=SimpleViewClass)
 
-    AddViewFactory = clone_and_replace_globals(formmeta.AddViewFactory,
-                                               new_factory_globals)
-    EditViewFactory = clone_and_replace_globals(formmeta.EditViewFactory,
-                                                new_factory_globals)
-    DisplayViewFactory = clone_and_replace_globals(formmeta.DisplayViewFactory,
+        AddViewFactory = clone_and_replace_globals(formmeta.AddViewFactory,
                                                    new_factory_globals)
+        EditViewFactory = clone_and_replace_globals(formmeta.EditViewFactory,
+                                                    new_factory_globals)
+        DisplayViewFactory = clone_and_replace_globals(formmeta.DisplayViewFactory,
+                                                       new_factory_globals)
 
-    # Now, replace globals in the directive handlers' __call__ by our own
-    # factories that were cloned right above.
-    new_form_globals = dict(AddViewFactory=AddViewFactory,
-                            EditViewFactory=EditViewFactory,
-                            DisplayViewFactory=DisplayViewFactory)
+        # Now, replace globals in the directive handlers' __call__ by our own
+        # factories that were cloned right above.
+        new_form_globals = dict(AddViewFactory=AddViewFactory,
+                                EditViewFactory=EditViewFactory,
+                                DisplayViewFactory=DisplayViewFactory)
 
-    class AddFormDirective(formmeta.AddFormDirective):
-        __call__ = clone_and_replace_globals(
-            formmeta.AddFormDirective.__call__.im_func,
-            new_form_globals)
+        class AddFormDirective(formmeta.AddFormDirective):
+            __call__ = clone_and_replace_globals(
+                formmeta.AddFormDirective.__call__.im_func,
+                new_form_globals)
 
-    class EditFormDirective(formmeta.EditFormDirective):
-        __call__ = clone_and_replace_globals(
-            formmeta.EditFormDirective.__call__.im_func,
-            new_form_globals)
+        class EditFormDirective(formmeta.EditFormDirective):
+            __call__ = clone_and_replace_globals(
+                formmeta.EditFormDirective.__call__.im_func,
+                new_form_globals)
 
-    class FormDirective(formmeta.FormDirective):
-        __call__ = clone_and_replace_globals(
-            formmeta.FormDirective.__call__.im_func,
-            new_form_globals)
+        class FormDirective(formmeta.FormDirective):
+            __call__ = clone_and_replace_globals(
+                formmeta.FormDirective.__call__.im_func,
+                new_form_globals)
 
-    class SubeditFormDirective(formmeta.SubeditFormDirective):
-        __call__ = clone_and_replace_globals(
-            formmeta.SubeditFormDirective.__call__.im_func,
-            new_form_globals)
+        class SubeditFormDirective(formmeta.SubeditFormDirective):
+            __call__ = clone_and_replace_globals(
+                formmeta.SubeditFormDirective.__call__.im_func,
+                new_form_globals)
 
-    class SchemaDisplayDirective(formmeta.SchemaDisplayDirective):
-        __call__ = clone_and_replace_globals(
-            formmeta.SchemaDisplayDirective.__call__.im_func,
-            new_form_globals)
-else:
-    AddViewFactory = formmeta.AddViewFactory
-    EditViewFactory = formmeta.EditViewFactory
-    DisplayViewFactory = formmeta.DisplayViewFactory
+        class SchemaDisplayDirective(formmeta.SchemaDisplayDirective):
+            __call__ = clone_and_replace_globals(
+                formmeta.SchemaDisplayDirective.__call__.im_func,
+                new_form_globals)
+    else:
+        AddViewFactory = formmeta.AddViewFactory
+        EditViewFactory = formmeta.EditViewFactory
+        DisplayViewFactory = formmeta.DisplayViewFactory
 
-    AddFormDirective = formmeta.AddFormDirective
-    EditFormDirective = formmeta.EditFormDirective
-    FormDirective = formmeta.FormDirective
-    SubeditFormDirective = formmeta.SubeditFormDirective
-    SchemaDisplayDirective = formmeta.SchemaDisplayDirective
+        AddFormDirective = formmeta.AddFormDirective
+        EditFormDirective = formmeta.EditFormDirective
+        FormDirective = formmeta.FormDirective
+        SubeditFormDirective = formmeta.SubeditFormDirective
+        SchemaDisplayDirective = formmeta.SchemaDisplayDirective



More information about the Checkins mailing list