[Checkins] SVN: grok/trunk/src/grok/ support for keyword arguments
to a custom grok
Martijn Faassen
faassen at infrae.com
Thu Dec 7 16:50:55 EST 2006
Log message for revision 71499:
support for keyword arguments to a custom grok
Fields. If a keyword argument is a schema-level field,
use it, otherwise pass keyword parameters along
to formlib.
Changed:
U grok/trunk/src/grok/__init__.py
U grok/trunk/src/grok/formlib.py
A grok/trunk/src/grok/tests/form/fields.py
-=-
Modified: grok/trunk/src/grok/__init__.py
===================================================================
--- grok/trunk/src/grok/__init__.py 2006-12-07 21:49:47 UTC (rev 71498)
+++ grok/trunk/src/grok/__init__.py 2006-12-07 21:50:55 UTC (rev 71499)
@@ -16,7 +16,6 @@
from zope.interface import implements
from zope.component import adapts
-from zope.formlib.form import Fields
from zope.event import notify
from zope.app.component.hooks import getSite
from zope.lifecycleevent import (
@@ -37,7 +36,7 @@
from grok._grok import do_grok as grok # Avoid name clash within _grok
from grok._grok import SubscribeDecorator as subscribe
from grok.error import GrokError, GrokImportError
-from grok.formlib import action, AutoFields
+from grok.formlib import action, AutoFields, Fields
# Our __init__ provides the grok API directly so using 'import grok' is enough.
from grok.interfaces import IGrokAPI
Modified: grok/trunk/src/grok/formlib.py
===================================================================
--- grok/trunk/src/grok/formlib.py 2006-12-07 21:49:47 UTC (rev 71498)
+++ grok/trunk/src/grok/formlib.py 2006-12-07 21:50:55 UTC (rev 71499)
@@ -18,6 +18,16 @@
if self.success_handler is not None:
return self.success_handler(self.form.grok_form, **data)
+def Fields(*args, **kw):
+ fields = []
+ for key, value in kw.items():
+ if IField.providedBy(value):
+ value.__name__ = key
+ fields.append(value)
+ del kw[key]
+ fields.sort(key=lambda field: field.order)
+ return form.Fields(*(args + tuple(fields)), **kw)
+
def setup_editform(factory, context):
"""Construct the real edit form, taking needed information from factory.
"""
Added: grok/trunk/src/grok/tests/form/fields.py
===================================================================
--- grok/trunk/src/grok/tests/form/fields.py 2006-12-07 21:49:47 UTC (rev 71498)
+++ grok/trunk/src/grok/tests/form/fields.py 2006-12-07 21:50:55 UTC (rev 71499)
@@ -0,0 +1,29 @@
+"""
+A grok.Fields can receive keyword parameters with schema fields. These
+should be avaible in the definition order.
+
+ >>> grok.grok(__name__)
+
+ >>> from zope import component
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> view = component.getMultiAdapter((Mammoth(), request), name='edit')
+ >>> len(view.form.form_fields)
+ 4
+ >>> [w.__name__ for w in view.form.form_fields]
+ ['a', 'b', 'g', 'd']
+
+"""
+import grok
+from zope import schema
+
+class Mammoth(grok.Model):
+ pass
+
+class Edit(grok.EditForm):
+ form_fields = grok.Fields(
+ a = schema.TextLine(title=u"Alpha"),
+ b = schema.TextLine(title=u"Beta"),
+ g = schema.TextLine(title=u"Gamma"),
+ d = schema.TextLine(title=u"Delta"))
+
More information about the Checkins
mailing list