[Checkins] SVN: megrok.z3cform/ - Initial import of a base support of z3c.form in grok.
Sylvain Viollon
sylvain at infrae.com
Mon Aug 25 09:39:06 EDT 2008
Log message for revision 90205:
- Initial import of a base support of z3c.form in grok.
Changed:
A megrok.z3cform/
A megrok.z3cform/trunk/
A megrok.z3cform/trunk/README.txt
A megrok.z3cform/trunk/docs/
A megrok.z3cform/trunk/docs/HISTORY.txt
A megrok.z3cform/trunk/setup.cfg
A megrok.z3cform/trunk/setup.py
A megrok.z3cform/trunk/src/
A megrok.z3cform/trunk/src/megrok/
A megrok.z3cform/trunk/src/megrok/__init__.py
A megrok.z3cform/trunk/src/megrok/z3cform/
A megrok.z3cform/trunk/src/megrok/z3cform/__init__.py
A megrok.z3cform/trunk/src/megrok/z3cform/components.py
A megrok.z3cform/trunk/src/megrok/z3cform/configure.zcml
A megrok.z3cform/trunk/src/megrok/z3cform/interfaces.py
A megrok.z3cform/trunk/src/megrok/z3cform/meta.py
A megrok.z3cform/trunk/src/megrok/z3cform/meta.zcml
A megrok.z3cform/trunk/src/megrok/z3cform/tests/
A megrok.z3cform/trunk/src/megrok/z3cform/tests/__init__.py
-=-
Added: megrok.z3cform/trunk/README.txt
===================================================================
--- megrok.z3cform/trunk/README.txt (rev 0)
+++ megrok.z3cform/trunk/README.txt 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,4 @@
+Introduction
+============
+
+
Property changes on: megrok.z3cform/trunk/README.txt
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Added: megrok.z3cform/trunk/docs/HISTORY.txt
===================================================================
--- megrok.z3cform/trunk/docs/HISTORY.txt (rev 0)
+++ megrok.z3cform/trunk/docs/HISTORY.txt 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,8 @@
+Changelog
+=========
+
+0.1 - Unreleased
+----------------
+
+* Initial release
+
Property changes on: megrok.z3cform/trunk/docs/HISTORY.txt
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Added: megrok.z3cform/trunk/setup.cfg
===================================================================
--- megrok.z3cform/trunk/setup.cfg (rev 0)
+++ megrok.z3cform/trunk/setup.cfg 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = dev
+tag_svn_revision = true
Added: megrok.z3cform/trunk/setup.py
===================================================================
--- megrok.z3cform/trunk/setup.py (rev 0)
+++ megrok.z3cform/trunk/setup.py 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,41 @@
+from setuptools import setup, find_packages
+import os
+
+version = '0.1'
+
+setup(name='megrok.z3cform',
+ version=version,
+ description="Z3C Forms support for Grok",
+ long_description=open("README.txt").read() + "\n" +
+ open(os.path.join("docs", "HISTORY.txt")).read(),
+ # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+ classifiers=[
+ "Environment :: Web Environment",
+ "Intended Audience :: Developers",
+ "License :: OSI Approved :: Zope Public License",
+ "Programming Language :: Python",
+ "Topic :: Software Development :: Libraries :: Python Modules",
+ "Framework :: Zope3",
+ ],
+ keywords='z3c forms grok',
+ author='Sylvain Viollon',
+ author_email='grok-dev at zope.org',
+ url='http://svn.zope.org/megrok.z3cform/trunk',
+ license='ZPL',
+ packages=find_packages('src', exclude=['ez_setup']),
+ package_dir={'': 'src'},
+ namespace_packages=['megrok'],
+ include_package_data=True,
+ zip_safe=False,
+ # We need to factor out the dependency on grokcore.formlib
+ install_requires=[
+ 'setuptools',
+ 'grokcore.component',
+ 'grokcore.view',
+ 'grokcore.formlib',
+ 'z3c.form'
+ ],
+ entry_points="""
+ # -*- Entry points: -*-
+ """,
+ )
Property changes on: megrok.z3cform/trunk/setup.py
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Added: megrok.z3cform/trunk/src/megrok/__init__.py
===================================================================
--- megrok.z3cform/trunk/src/megrok/__init__.py (rev 0)
+++ megrok.z3cform/trunk/src/megrok/__init__.py 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Property changes on: megrok.z3cform/trunk/src/megrok/__init__.py
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Added: megrok.z3cform/trunk/src/megrok/z3cform/__init__.py
===================================================================
--- megrok.z3cform/trunk/src/megrok/z3cform/__init__.py (rev 0)
+++ megrok.z3cform/trunk/src/megrok/z3cform/__init__.py 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,2 @@
+
+from components import Form, AddForm, EditForm, DisplayForm
Property changes on: megrok.z3cform/trunk/src/megrok/z3cform/__init__.py
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Added: megrok.z3cform/trunk/src/megrok/z3cform/components.py
===================================================================
--- megrok.z3cform/trunk/src/megrok/z3cform/components.py (rev 0)
+++ megrok.z3cform/trunk/src/megrok/z3cform/components.py 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,111 @@
+
+
+from zope import interface
+from zope import component
+from zope.publisher.publish import mapply
+from zope.pagetemplate.interfaces import IPageTemplate
+
+import martian
+import grokcore.view
+from grokcore.view.interfaces import ITemplate as IGrokTemplate
+
+from megrok.z3cform.interfaces import IGrokForm
+
+from z3c.form import form, field
+from z3c.form.interfaces import IFormLayer
+
+
+class DefaultFields(field.Fields):
+ """Marker for default fields.
+ """
+
+class GrokForm(object):
+ """A z3c grok form. This is based on the GrokForm designed for
+ Formlib.
+ """
+
+ interface.implements(IGrokForm)
+ martian.baseclass()
+
+ fields = DefaultFields()
+
+ def __init__(self, *args):
+ super(GrokForm, self).__init__(*args)
+ self.__name__ = self.__view_name__
+ self.static = component.queryAdapter(
+ self.request, interface.Interface,
+ name = self.module_info.package_dotted_name)
+
+ def update(self):
+ """Subclasses can override this method just like on regular
+ grok.Views. It will be called before any form processing
+ happens."""
+
+ def updateForm(self):
+ """Update the form, i.e. process form input using widgets.
+
+ On z3c.form forms, this is what the update() method is.
+ In grok views, the update() method has a different meaning.
+ That's why this method is called update_form() in grok forms.
+ """
+ super(GrokForm, self).update()
+
+ def _render_template(self):
+ assert not (self.template is None)
+ if IGrokTemplate.providedBy(self.template):
+ return super(GrokForm, self)._render_template()
+ return self.template()
+
+ def render(self):
+ """People don't have to define a render method here, and we
+ have to use the one provided by z3c.form (people can provide
+ render method in grok), but we have to call the template
+ correctly.
+ """
+
+ if self.template is None:
+ self.template = component.getMultiAdapter((self, self.request), IPageTemplate)
+ return self._render_template()
+
+
+ render.base_method = True # Mark the method to prevent people to
+ # override it.
+
+ def __call__(self):
+ mapply(self.update, (), self.request)
+ if self.request.response.getStatus() in (302, 303):
+ # A redirect was triggered somewhere in update(). Don't
+ # continue rendering the template or doing anything else.
+ return
+
+ self.updateForm()
+ return self.render()
+
+
+class Form(GrokForm, form.Form, grokcore.view.View):
+ """Normal z3c form.
+ """
+
+ martian.baseclass()
+
+
+class AddForm(GrokForm, form.AddForm, grokcore.view.View):
+ """z3c add form.
+ """
+
+ martian.baseclass()
+
+
+class EditForm(GrokForm, form.EditForm, grokcore.view.View):
+ """z3c edit form.
+ """
+
+ martian.baseclass()
+
+
+class DisplayForm(GrokForm, form.DisplayForm, grokcore.view.View):
+ """z3c display form.
+ """
+
+ martian.baseclass()
+
Property changes on: megrok.z3cform/trunk/src/megrok/z3cform/components.py
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Added: megrok.z3cform/trunk/src/megrok/z3cform/configure.zcml
===================================================================
--- megrok.z3cform/trunk/src/megrok/z3cform/configure.zcml (rev 0)
+++ megrok.z3cform/trunk/src/megrok/z3cform/configure.zcml 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,6 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope">
+
+ <include package="z3c.form" file="meta.zcml" />
+
+</configure>
Added: megrok.z3cform/trunk/src/megrok/z3cform/interfaces.py
===================================================================
--- megrok.z3cform/trunk/src/megrok/z3cform/interfaces.py (rev 0)
+++ megrok.z3cform/trunk/src/megrok/z3cform/interfaces.py 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,7 @@
+
+from zope import interface
+
+class IGrokForm(interface.Interface):
+ """A grok z3c form. This marker interface is used to have a
+ different default template.
+ """
Property changes on: megrok.z3cform/trunk/src/megrok/z3cform/interfaces.py
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Added: megrok.z3cform/trunk/src/megrok/z3cform/meta.py
===================================================================
--- megrok.z3cform/trunk/src/megrok/z3cform/meta.py (rev 0)
+++ megrok.z3cform/trunk/src/megrok/z3cform/meta.py 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,54 @@
+
+from zope.interface.interfaces import IInterface
+
+import grokcore.component
+import grokcore.view
+from grokcore.view.meta import ViewGrokker
+from grokcore.formlib.formlib import most_specialized_interfaces
+
+from martian.error import GrokError
+import martian
+
+from megrok.z3cform import components
+from z3c.form import field
+
+def get_auto_fields(context):
+ """Get the form fields for context.
+
+ This methods is the same than for formlib implementation, but use
+ z3cform fields instead.
+ """
+ # for an interface context, we generate them from that interface
+ if IInterface.providedBy(context):
+ return field.Fields(context)
+ # if we have a non-interface context, we're autogenerating them
+ # from any schemas defined by the context
+ fields = field.Fields(*most_specialized_interfaces(context))
+ # we pull in this field by default, but we don't want it in our form
+ fields = field.omit('__name__')
+ return fields
+
+
+class FormGrokker(martian.ClassGrokker):
+
+ martian.component(components.GrokForm)
+ martian.directive(grokcore.component.context)
+ # execute this grokker before grokcore.view's ViewGrokker
+ martian.priority(martian.priority.bind().get(ViewGrokker) + 10)
+
+ def execute(self, form, context, **kw):
+
+ # Set fields by default.
+ if isinstance(form.fields, components.DefaultFields):
+ form.fields = get_auto_fields(context)
+
+ # Don't override render method.
+ if not getattr(form.render, 'base_method', False):
+ raise GrokError(
+ "It is not allowed to specify a custom 'render' "
+ "method for form %r. Forms either use the default "
+ "template or a custom-supplied one." % factory,
+ factory)
+
+ return True
+
Property changes on: megrok.z3cform/trunk/src/megrok/z3cform/meta.py
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Added: megrok.z3cform/trunk/src/megrok/z3cform/meta.zcml
===================================================================
--- megrok.z3cform/trunk/src/megrok/z3cform/meta.zcml (rev 0)
+++ megrok.z3cform/trunk/src/megrok/z3cform/meta.zcml 2008-08-25 13:39:05 UTC (rev 90205)
@@ -0,0 +1,10 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:grok="http://namespaces.zope.org/grok">
+
+ <include package="z3c.form" file="meta.zcml" />
+ <include package="grokcore.component" file="meta.zcml" />
+
+ <grok:grok package=".meta" />
+
+</configure>
Added: megrok.z3cform/trunk/src/megrok/z3cform/tests/__init__.py
===================================================================
Property changes on: megrok.z3cform/trunk/src/megrok/z3cform/tests/__init__.py
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
More information about the Checkins
mailing list