[Checkins] SVN: z3c.ptcompat/trunk/ - Added support for browser:addform, browser:editform, browser:form,
Sidnei da Silva
sidnei at enfoldsystems.com
Mon Mar 9 13:08:07 EDT 2009
Log message for revision 97710:
- Added support for browser:addform, browser:editform, browser:form,
and browser:schemadisplay directives.
Changed:
U z3c.ptcompat/trunk/CHANGES.txt
U z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml
U z3c.ptcompat/trunk/src/z3c/ptcompat/tests/test_doctests.py
U z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py
U z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.txt
-=-
Modified: z3c.ptcompat/trunk/CHANGES.txt
===================================================================
--- z3c.ptcompat/trunk/CHANGES.txt 2009-03-09 16:19:10 UTC (rev 97709)
+++ z3c.ptcompat/trunk/CHANGES.txt 2009-03-09 17:08:06 UTC (rev 97710)
@@ -6,6 +6,8 @@
- Nothing changed yet.
+- Added support for browser:addform, browser:editform, browser:form,
+ and browser:schemadisplay directives.
0.5.2 (2009-03-09)
------------------
Modified: z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml
===================================================================
--- z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml 2009-03-09 16:19:10 UTC (rev 97709)
+++ z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml 2009-03-09 17:08:06 UTC (rev 97710)
@@ -18,13 +18,82 @@
schema="zope.viewlet.metadirectives.IViewletDirective"
handler=".zcml.viewlet_directive"
/>
-
+
<meta: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"
+ >
+
+ <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>
+
+
+ <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>
+
+
+ <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>
+
+
+ <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>
+
</meta:directives>
</configure>
Modified: z3c.ptcompat/trunk/src/z3c/ptcompat/tests/test_doctests.py
===================================================================
--- z3c.ptcompat/trunk/src/z3c/ptcompat/tests/test_doctests.py 2009-03-09 16:19:10 UTC (rev 97709)
+++ z3c.ptcompat/trunk/src/z3c/ptcompat/tests/test_doctests.py 2009-03-09 17:08:06 UTC (rev 97710)
@@ -11,6 +11,7 @@
import zope.component.testing
import zope.configuration.xmlconfig
+import z3c.pt
import z3c.ptcompat
class TestParticipation(object):
@@ -21,7 +22,7 @@
zope.component.testing.setUp(test)
zope.configuration.xmlconfig.XMLConfig('meta.zcml', z3c.ptcompat)()
zope.configuration.xmlconfig.XMLConfig('configure.zcml', z3c.pt)()
-
+
def tearDown(test):
zope.component.testing.tearDown(test)
Modified: z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py
===================================================================
--- z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py 2009-03-09 16:19:10 UTC (rev 97709)
+++ z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py 2009-03-09 17:08:06 UTC (rev 97710)
@@ -1,4 +1,5 @@
import sys
+from new import function
from zope.interface import classImplements
from zope.viewlet import viewlet
@@ -7,9 +8,22 @@
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
+def clone_and_replace_globals(func, new_globals):
+ func_globals = func.func_globals.copy()
+ func_globals.update(new_globals)
+ func_defaults = func.func_defaults or ()
+ new_func = function(func.func_code, func_globals,
+ func.func_name, func_defaults)
+ new_func.__doc__ = getattr(func, '__doc__', '')
+ func_dict = getattr(func, '__dict__', None)
+ if func_dict is not None:
+ new_func.__dict__ = func_dict.copy()
+ return new_func
+
def SimpleViewClass(src, offering=None, used_for=None, bases=(), name=u''):
if offering is None:
offering = sys._getframe(1).f_globals
@@ -25,7 +39,8 @@
return class_
-def SimpleViewletClass(src, offering=None, bases=(), attributes=None, name=u''):
+def SimpleViewletClass(src, offering=None, bases=(),
+ attributes=None, name=u''):
if offering is None:
offering = sys._getframe(1).f_globals
@@ -65,9 +80,10 @@
if template:
bases = class_ and (class_,) or ()
- kwargs['class_'] = SimpleViewClass(str(template), bases=bases, name=name)
+ kwargs['class_'] = SimpleViewClass(str(template), bases=bases,
+ name=name)
del kwargs['template']
-
+
return viewmeta.page(_context, name, *args, **kwargs)
def viewlet_directive(_context, name, *args, **kwargs):
@@ -76,20 +92,64 @@
if template:
bases = class_ and (class_,) or ()
- kwargs['class_'] = SimpleViewletClass(str(template), bases=bases, name=name)
+ kwargs['class_'] = SimpleViewletClass(str(template),
+ bases=bases, name=name)
del kwargs['template']
-
+
return viewletmeta.viewletDirective(_context, name, *args, **kwargs)
def viewlet_manager_directive(_context, name, *args, **kwargs):
class_ = kwargs.get('class_')
template = kwargs.get('template')
provides = kwargs.setdefault('provides', IViewletManager)
-
+
if template:
bases = class_ and (class_,) or ()
kwargs['class_'] = ViewletManager(
name, provides, template=str(template), bases=bases)
del kwargs['template']
-
+
return viewletmeta.viewletManagerDirective(_context, name, *args, **kwargs)
+
+# 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,
+ 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)
+
+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 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 SchemaDisplayDirective(formmeta.SchemaDisplayDirective):
+ __call__ = clone_and_replace_globals(
+ formmeta.SchemaDisplayDirective.__call__.im_func,
+ new_form_globals)
Modified: z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.txt
===================================================================
--- z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.txt 2009-03-09 16:19:10 UTC (rev 97709)
+++ z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.txt 2009-03-09 17:08:06 UTC (rev 97710)
@@ -48,6 +48,215 @@
>>> issubclass(factory, View)
True
+Forms
+=====
+
+Define a simple schema that we will use for those directives:
+
+ >>> from zope.interface import Interface
+ >>> from zope.schema import TextLine
+
+ >>> class Schema(Interface):
+ ... title = TextLine(title=u'Some Title')
+
+
+Add Form
+--------
+
+ >>> from z3c.ptcompat import zcml
+ >>> zcml.AddFormDirective(
+ ... context, name="add-test1", permission="zope.View",
+ ... schema=Schema, for_=Schema,
+ ... template=os.path.join(path, "test.pt"))()
+
+ >>> context.execute_actions()
+
+Verify that page has been registered as a component.
+
+ >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+ >>> factory = component.getSiteManager().adapters.lookup(
+ ... (Schema, IDefaultBrowserLayer),
+ ... interface.Interface, name="add-test1")
+
+ >>> factory.index
+ <ViewPageTemplateFile .../z3c.ptcompat/src/z3c/ptcompat/tests/test.pt>
+
+We can base the view on an existing class.
+
+ >>> class View(object):
+ ... pass
+
+ >>> zcml.AddFormDirective(
+ ... context, name="add-test2", permission="zope.View",
+ ... schema=Schema, for_=Schema,
+ ... class_=View, template=os.path.join(path, "test.pt"))()
+
+ >>> context.execute_actions()
+
+ >>> factory = component.getSiteManager().adapters.lookup(
+ ... (Schema, IDefaultBrowserLayer),
+ ... interface.Interface, name="add-test2")
+
+ >>> factory.index
+ <ViewPageTemplateFile .../z3c.ptcompat/src/z3c/ptcompat/tests/test.pt>
+
+ >>> issubclass(factory, View)
+ True
+
+Edit Form
+---------
+
+ >>> from z3c.ptcompat import zcml
+ >>> zcml.EditFormDirective(
+ ... context, name="edit-test1", permission="zope.View",
+ ... schema=Schema, for_=Schema,
+ ... template=os.path.join(path, "test.pt"))()
+
+ >>> context.execute_actions()
+
+Verify that page has been registered as a component.
+
+ >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+ >>> factory = component.getSiteManager().adapters.lookup(
+ ... (Schema, IDefaultBrowserLayer),
+ ... interface.Interface, name="edit-test1")
+
+ >>> factory.index
+ <ViewPageTemplateFile .../z3c.ptcompat/src/z3c/ptcompat/tests/test.pt>
+
+We can base the view on an existing class.
+
+ >>> class View(object):
+ ... pass
+
+ >>> zcml.EditFormDirective(
+ ... context, name="edit-test2", permission="zope.View",
+ ... schema=Schema, for_=Schema,
+ ... class_=View, template=os.path.join(path, "test.pt"))()
+
+ >>> context.execute_actions()
+
+ >>> factory = component.getSiteManager().adapters.lookup(
+ ... (Schema, IDefaultBrowserLayer),
+ ... interface.Interface, name="edit-test2")
+
+ >>> factory.index
+ <ViewPageTemplateFile .../z3c.ptcompat/src/z3c/ptcompat/tests/test.pt>
+
+ >>> issubclass(factory, View)
+ True
+
+Subedit Form
+------------
+
+ >>> from z3c.ptcompat import zcml
+ >>> zcml.SubeditFormDirective(
+ ... context, name="subedit-test1", permission="zope.View",
+ ... schema=Schema, for_=Schema,
+ ... template=os.path.join(path, "test.pt"))()
+
+ >>> context.execute_actions()
+
+Verify that page has been registered as a component.
+
+ >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+ >>> factory = component.getSiteManager().adapters.lookup(
+ ... (Schema, IDefaultBrowserLayer),
+ ... interface.Interface, name="subedit-test1")
+
+ >>> factory.index
+ <ViewPageTemplateFile .../z3c.ptcompat/src/z3c/ptcompat/tests/test.pt>
+
+We can base the view on an existing class.
+
+ >>> class View(object):
+ ... pass
+
+ >>> zcml.SubeditFormDirective(
+ ... context, name="subedit-test2", permission="zope.View",
+ ... schema=Schema, for_=Schema,
+ ... class_=View, template=os.path.join(path, "test.pt"))()
+
+ >>> context.execute_actions()
+
+ >>> factory = component.getSiteManager().adapters.lookup(
+ ... (Schema, IDefaultBrowserLayer),
+ ... interface.Interface, name="subedit-test2")
+
+ >>> factory.index
+ <ViewPageTemplateFile .../z3c.ptcompat/src/z3c/ptcompat/tests/test.pt>
+
+ >>> issubclass(factory, View)
+ True
+
+Form
+----
+
+We can base the view on an existing class.
+
+ >>> class View(object):
+ ... pass
+
+ >>> zcml.FormDirective(
+ ... context, name="form-test2", permission="zope.View",
+ ... schema=Schema, for_=Schema,
+ ... class_=View, template=os.path.join(path, "test.pt"))()
+
+ >>> context.execute_actions()
+
+ >>> factory = component.getSiteManager().adapters.lookup(
+ ... (Schema, IDefaultBrowserLayer),
+ ... interface.Interface, name="form-test2")
+
+ >>> factory.index
+ <ViewPageTemplateFile .../z3c.ptcompat/src/z3c/ptcompat/tests/test.pt>
+
+ >>> issubclass(factory, View)
+ True
+
+Schema Display
+--------------
+
+ >>> from z3c.ptcompat import zcml
+ >>> zcml.SchemaDisplayDirective(
+ ... context, name="schema-display-test1", permission="zope.View",
+ ... schema=Schema, for_=Schema,
+ ... template=os.path.join(path, "test.pt"))()
+
+ >>> context.execute_actions()
+
+Verify that page has been registered as a component.
+
+ >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+ >>> factory = component.getSiteManager().adapters.lookup(
+ ... (Schema, IDefaultBrowserLayer),
+ ... interface.Interface, name="schema-display-test1")
+
+ >>> factory.index
+ <ViewPageTemplateFile .../z3c.ptcompat/src/z3c/ptcompat/tests/test.pt>
+
+We can base the view on an existing class.
+
+ >>> class View(object):
+ ... pass
+
+ >>> zcml.SchemaDisplayDirective(
+ ... context, name="schema-display-test2", permission="zope.View",
+ ... schema=Schema, for_=Schema,
+ ... class_=View, template=os.path.join(path, "test.pt"))()
+
+ >>> context.execute_actions()
+
+ >>> factory = component.getSiteManager().adapters.lookup(
+ ... (Schema, IDefaultBrowserLayer),
+ ... interface.Interface, name="schema-display-test2")
+
+ >>> factory.index
+ <ViewPageTemplateFile .../z3c.ptcompat/src/z3c/ptcompat/tests/test.pt>
+
+ >>> issubclass(factory, View)
+ True
+
Viewlet managers
----------------
More information about the Checkins
mailing list