[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Forms/Views/Browser - FormView.py:1.7 IForm.py:1.5 configure.zcml:1.4
Stephan Richter
srichter@cbu.edu
Wed, 17 Jul 2002 14:43:42 -0400
Update of /cvs-repository/Zope3/lib/python/Zope/App/Forms/Views/Browser
In directory cvs.zope.org:/tmp/cvs-serv1727/lib/python/Zope/App/Forms/Views/Browser
Modified Files:
FormView.py IForm.py configure.zcml
Log Message:
Okay, I finally finished that Schema Demo code. See that
SchemaTestObject.py file for more info.
You can also see the test page in every folder:
http://localhost:8080/testSchemaFormAction.html
=== Zope3/lib/python/Zope/App/Forms/Views/Browser/FormView.py 1.6 => 1.7 ===
form = None
custom_widgets = None
+ fields_order = None
def getFields(self):
'See Zope.App.Forms.Views.Browser.IForm.IReadForm'
@@ -41,13 +42,20 @@
else:
interfaces = (interfaces,)
request = self.request
- fields = []
+ fields = {}
for interface in interfaces:
for name in interface.names(1):
attr = interface.getDescriptionFor(name)
if IField.isImplementedBy(attr):
- fields.append(attr)
- return fields
+ fields[name] = attr
+
+ if self.fields_order is None:
+ return fields.values()
+
+ result = []
+ for id in self.fields_order:
+ result.append(fields[id])
+ return result
def getWidgetForFieldId(self, id):
@@ -98,7 +106,7 @@
try:
data[field] = widget.convert(mapping[field])
except ConversionError, error:
- errors.append((field.id, error))
+ errors.append((field, error))
if errors:
raise ConversionErrorsAll, errors
@@ -113,7 +121,7 @@
try:
field.validate(mapping[field])
except ValidationError, error:
- errors.append((field.id, error))
+ errors.append((field, error))
if errors:
raise ValidationErrorsAll, errors
@@ -139,8 +147,8 @@
'See Zope.App.Forms.Views.Browser.IForm.IWriteForm'
try:
self.saveValuesInContext()
- except Error, e:
- errors = e
+ except (ValidationErrorsAll, ConversionErrorsAll), e:
+ return self.form(self, errors=e)
else:
- return self.request.response.redirect(self.request.URL[-1])
+ return self.form(self)
=== Zope3/lib/python/Zope/App/Forms/Views/Browser/IForm.py 1.4 => 1.5 ===
"""This interface defines methods and attributes that are required to
display a form."""
- form = Attribute("""The form template. Usually a Page Template.""")
- custom_widgets = Attribute("""A dictionary that holds custom widgets
- for various fields.""")
+ form = Attribute(
+ """The form template. Usually a Page Template.""")
+
+ custom_widgets = Attribute(
+ """A dictionary that holds custom widgets for various fields.""")
+
+ fields_order = Attribute(
+ """A list that contains the field ids in the order they should
+ be displayed. If the value of this attribute is None, then the
+ fields are just grapped randomly out of the various schemas.
+
+ Furthermore, if fields are specified then only these fields are
+ used for the form, not all that could be possibly found.
+ """)
def getFields():
"""Get all the fields that need input from the content object."""
=== Zope3/lib/python/Zope/App/Forms/Views/Browser/configure.zcml 1.3 => 1.4 ===
<browser:view
permission="Zope.View"
for="Schema.IField.IStr"
- name="normal"
- factory=".TextWidget." />
+ name="widget"
+ factory=".Widget.TextWidget." />
+
+ <browser:view
+ permission="Zope.View"
+ for="Schema.IField.IInt"
+ name="widget"
+ factory=".Widget.TextWidget." />
+
+ <browser:view
+ permission="Zope.View"
+ for="Schema.IField.IFloat"
+ name="widget"
+ factory=".Widget.TextWidget." />
<browser:view
permission="Zope.View"
for="Schema.IField.IBool"
- name="normal"
- factory=".CheckboxWidget." />
+ name="widget"
+ factory=".Widget.CheckBoxWidget." />
- <!-- Test view for folders -->
+ <browser:view
+ permission="Zope.View"
+ for="Schema.IField.ITuple"
+ name="widget"
+ factory=".Widget.TextAreaWidget." />
+
+ <browser:view
+ permission="Zope.View"
+ for="Schema.IField.IList"
+ name="widget"
+ factory=".Widget.TextAreaWidget." />
- <browser:view
- permission="Zope.View"
- for="Zope.App.OFS.Content.Folder.Folder.IFolder."
- factory=".FormView.">
- <browser:page name="testFormView.html"
- template="testFormView.pt" />
- </browser:view>
+ <!-- Insert a simple test/demo -->
+ <include package=".tests" file="testConfigure.zcml" />
</zopeConfigure>