[Checkins] SVN: z3c.form/trunk/src/z3c/form/con Changed
registration of file upload data converter.
Roger Ineichen
roger at projekt01.ch
Mon Jun 11 18:30:14 EDT 2007
Log message for revision 76629:
Changed registration of file upload data converter.
Register FileUploadDataConverter for IBytes/IFileWidget.
This will force to use the data converter only for IFileWidget
and not for IBytes at all. IBytes/IWidget uses by default the
FieldDataConverter.
Added tests
Note:
The default widget for IBytes is the IFileWidget.
What does this mean:
If you need to use a text area widget for IBytes, you have to
register a custom widget in the form because the default widget
for IBytes is a file upload widget. You can do this by simply
set ``fields['foobar'].widgetFactory = TextWidget``.
Changed:
U z3c.form/trunk/src/z3c/form/configure.zcml
U z3c.form/trunk/src/z3c/form/converter.py
U z3c.form/trunk/src/z3c/form/converter.txt
-=-
Modified: z3c.form/trunk/src/z3c/form/configure.zcml
===================================================================
--- z3c.form/trunk/src/z3c/form/configure.zcml 2007-06-11 21:24:31 UTC (rev 76628)
+++ z3c.form/trunk/src/z3c/form/configure.zcml 2007-06-11 22:30:13 UTC (rev 76629)
@@ -46,7 +46,7 @@
factory=".converter.TimedeltaDataConverter"
/>
<adapter
- factory=".converter.BytesDataConverter"
+ factory=".converter.FileUploadDataConverter"
/>
<adapter
factory=".converter.SequenceDataConverter"
Modified: z3c.form/trunk/src/z3c/form/converter.py
===================================================================
--- z3c.form/trunk/src/z3c/form/converter.py 2007-06-11 21:24:31 UTC (rev 76628)
+++ z3c.form/trunk/src/z3c/form/converter.py 2007-06-11 22:30:13 UTC (rev 76629)
@@ -108,14 +108,14 @@
return datetime.timedelta(days, sum(seconds))
-class BytesDataConverter(FieldDataConverter):
+class FileUploadDataConverter(FieldDataConverter):
"""A special data converter for bytes, supporting also FileUpload.
Since IBytes represents a file upload too, this converter can handle
zope.publisher.browser.FileUpload object as given value.
"""
zope.component.adapts(
- zope.schema.interfaces.IBytes, interfaces.IWidget)
+ zope.schema.interfaces.IBytes, interfaces.IFileWidget)
def toFieldValue(self, value):
"""See interfaces.IDataConverter"""
Modified: z3c.form/trunk/src/z3c/form/converter.txt
===================================================================
--- z3c.form/trunk/src/z3c/form/converter.txt 2007-06-11 21:24:31 UTC (rev 76628)
+++ z3c.form/trunk/src/z3c/form/converter.txt 2007-06-11 22:30:13 UTC (rev 76629)
@@ -205,17 +205,19 @@
datetime.timedelta(1, 3661)
-Bytes Data Converter
---------------------
+FileUpload Data Converter
+-------------------------
Since the ``Bytes`` field can contain a FileUpload object, we have to make
sure we can convert FileUpload objects to bytes too.
+ >>> import z3c.form.browser.file
+ >>> fileWidget = z3c.form.browser.file.FileWidget(TestRequest())
>>> bytes = zope.schema.Bytes()
- >>> bdc = converter.BytesDataConverter(bytes, text)
+ >>> bdc = converter.FileUploadDataConverter(bytes, fileWidget)
>>> bdc
- <DataConverter from Bytes to Widget>
+ <DataConverter from Bytes to FileWidget>
Bytes are converted to unicode:
@@ -246,7 +248,35 @@
'File upload contents.'
+Bytes Data Converter
+--------------------
+The IBytes field uses a file upload widget which uses a file upload data
+converter. This requires that we test the IBytes converter for normal IWidget.
+Note that IBytes always will get a FileUpload widget, if you need to use a
+text field for bytes, you have to register a custom widget using the
+widgetFactory attribute of the z3c.form.interfaces.IField.
+
+ >>> bytes = zope.schema.Bytes()
+
+ >>> fdc = converter.FieldDataConverter(bytes, text)
+ >>> fdc
+ <DataConverter from Bytes to Widget>
+
+BytesLine are simply converted to string:
+
+ >>> value = 'foobar'
+
+ >>> fdc.toWidgetValue(value)
+ u'foobar'
+
+The converter only knows how to convert this particular format back to a
+datetime value:
+
+ >>> fdc.toFieldValue(u'foobar')
+ 'foobar'
+
+
Sequence Data Converter
-----------------------
More information about the Checkins
mailing list