AW: [Zope-dev] z3c.form: unicode error with upload form

Christophe Combelles ccomb at free.fr
Fri Mar 7 19:05:25 EST 2008


Roger Ineichen a écrit :
> Hi Christophe
> 
>> Betreff: [Zope-dev] z3c.form: unicode error with upload form
>>
>> Hi,
>>
>> The z3c.form.converter.FileUploadDataConverter has no 
>> toWidgetValue() method.
>> Instead, it inherits from BaseDataConverter.toWidgetValue(), 
>> that returns unicode(data).
>>
>> However unicode(value) returns an error when the value is binary data!
>>
>> Shouldn't FileUploadDataConverter implement its own toWidgetValue?
> 
> I guess I know what you are trying to do.
> As I implemented this widget I was thinking that a file upload never get
> used for representation. Becaues it allways offers only upload again
> if already an uploaded file exists.

I've just an image object, that I want to upload:

class ThumbnailImageEdit(EditForm):
     fields = Fields(IImage).select('data')
(...)

So it wants to display the 'data' field, and fails. Actually not displaying 
anything is a reasonable default option but it should not fail. This really 
should be as simple as the formlib for such simple cases, without having to 
select a particular widget. An advanced default option would be to display the 
image beside the upload field, but it may be difficult to find a decent layout.

Christophe


> 
> And the converter is only designed for upload files and not for convert 
> them to widget output. Because the converter is registered for the 
> upload widget which never should represent the content.
> 
> This means you have to use a own widget for represent a file 
> content if it's text. And for this widget you can use another
> custom converter. But sure I could be wrong. Do you see anything
> which is wrong with that?
> 
> Now I guess, you are uesing the IFileWidget for your custom
> widget implementation and this doesn't work, right?
> 
> See also my commit message in 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``.
> -----
> 
> Does this make sense to you?
> 
> Any hintes and improvments are very welcome.
> 
> Regards
> Roger Ineichen
> 
>> Christophe
> 
> 
> 



More information about the Zope-Dev mailing list