Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Zope: Dev

z3c.form: Problem validating file uploads

 

 

Zope dev RSS feed   Index | Next | Previous | View Threaded


mh at gocept

Apr 12, 2009, 6:12 AM

Post #1 of 4 (679 views)
Permalink
z3c.form: Problem validating file uploads

Hi,

I'm using a trunk version of z3c.form and have the following situation:
In my interface I have a zope.schema.Bytes field.
z3c.form.converter.FileUploadDataConverter.toFieldValue returns
z3c.form.interfaces.NOT_CHANGED when I do not upload a file.
z3c.form.validator.SimpleFieldValidator.validate fails later on as the
value (z3c.form.interfaces.NOT_CHANGED) is not of type str (which is
required by the Bytes field).
I created a branch in svn to show the behavior. (z3c.form/branches/
icemac_validate_NOT_CHANGED)

I'm not sure how to fix this generally, some possible solutions come
to my mind, but each idea has its own problems:

1) Create a special validator for zope.schema.Bytes +
z3c.form.interfaces.IFileWidget which knows how to handle NOT_CHANGED.
This does not seem to be a really general solution and might have
the same problems like the following ideas.

2) When z3c.form.validator.SimpleFieldValidator.validate is called
with NOT_CHANGED as value, try to look up the value on the context
object.
This fails on AddForms as the context there is the parent object.

3) When z3c.form.validator.SimpleFieldValidator.validate is called
with NOT_CHANGED as value, do not validate hoping the previous value
was valid.
This approach fails with AddForms, too, when the Bytes field is
required. (The missing-value-error does not get raised.)

Anyone having an idea for a possibly working solution?

Yours sincerely,
--
Michael Howitz · mh [at] gocept · software developer
gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 8 · fax +49 345 1229889 1
Zope and Plone consulting and development

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


mh at gocept

Apr 22, 2009, 4:12 AM

Post #2 of 4 (597 views)
Permalink
Re: z3c.form: Problem validating file uploads [In reply to]

Am 12.04.2009 um 15:12 schrieb Michael Howitz:
> Hi,
>
> I'm using a trunk version of z3c.form and have the following
> situation:
> In my interface I have a zope.schema.Bytes field.
> z3c.form.converter.FileUploadDataConverter.toFieldValue returns
> z3c.form.interfaces.NOT_CHANGED when I do not upload a file.
> z3c.form.validator.SimpleFieldValidator.validate fails later on as the
> value (z3c.form.interfaces.NOT_CHANGED) is not of type str (which is
> required by the Bytes field).
> I created a branch in svn to show the behavior. (z3c.form/branches/
> icemac_validate_NOT_CHANGED)
>
> I'm not sure how to fix this generally, some possible solutions come
> to my mind, but each idea has its own problems:
>
> 1) Create a special validator for zope.schema.Bytes +
> z3c.form.interfaces.IFileWidget which knows how to handle NOT_CHANGED.
> This does not seem to be a really general solution and might have
> the same problems like the following ideas.
>
> 2) When z3c.form.validator.SimpleFieldValidator.validate is called
> with NOT_CHANGED as value, try to look up the value on the context
> object.
> This fails on AddForms as the context there is the parent object.
>
> 3) When z3c.form.validator.SimpleFieldValidator.validate is called
> with NOT_CHANGED as value, do not validate hoping the previous value
> was valid.
> This approach fails with AddForms, too, when the Bytes field is
> required. (The missing-value-error does not get raised.)
>
> Anyone having an idea for a possibly working solution?

As I got no responsed, I'd like to put this issue into z3c.form's
bugtracker. But which is the correct one?
https://bugs.launchpad.net/zope3/ ?

Yours sincerely,
--
Michael Howitz · mh [at] gocept · software developer
gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 8 · fax +49 345 1229889 1
Zope and Plone consulting and development

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


jh at improva

Apr 22, 2009, 5:48 AM

Post #3 of 4 (590 views)
Permalink
Re: z3c.form: Problem validating file uploads [In reply to]

Michael Howitz wrote:
> Am 12.04.2009 um 15:12 schrieb Michael Howitz:
>> Hi,
>>
>> I'm using a trunk version of z3c.form and have the following
>> situation:
>> In my interface I have a zope.schema.Bytes field.
>> z3c.form.converter.FileUploadDataConverter.toFieldValue returns
>> z3c.form.interfaces.NOT_CHANGED when I do not upload a file.
>> z3c.form.validator.SimpleFieldValidator.validate fails later on as the
>> value (z3c.form.interfaces.NOT_CHANGED) is not of type str (which is
>> required by the Bytes field).
>> I created a branch in svn to show the behavior. (z3c.form/branches/
>> icemac_validate_NOT_CHANGED)
>>
>> I'm not sure how to fix this generally, some possible solutions come
>> to my mind, but each idea has its own problems:
>>
>> 1) Create a special validator for zope.schema.Bytes +
>> z3c.form.interfaces.IFileWidget which knows how to handle NOT_CHANGED.
>> This does not seem to be a really general solution and might have
>> the same problems like the following ideas.
>>
>> 2) When z3c.form.validator.SimpleFieldValidator.validate is called
>> with NOT_CHANGED as value, try to look up the value on the context
>> object.
>> This fails on AddForms as the context there is the parent object.
>>
>> 3) When z3c.form.validator.SimpleFieldValidator.validate is called
>> with NOT_CHANGED as value, do not validate hoping the previous value
>> was valid.
>> This approach fails with AddForms, too, when the Bytes field is
>> required. (The missing-value-error does not get raised.)
>>
>> Anyone having an idea for a possibly working solution?
>
> As I got no responsed, I'd like to put this issue into z3c.form's
> bugtracker. But which is the correct one?
> https://bugs.launchpad.net/zope3/ ?
>

I don't know about the right tracker for this, but I think the right
solution is 2) except that when widget.ignoreContext is True the default
value should be looked up and validated instead. In other words, change
z3c.form.validator.SimpleFieldValidator.validate to something like this
(untested):

def validate(self, value):
"""See interfaces.IValidator"""
context = self.context
request = self.request
view = self.view
field = self.field
widget = self.widget
if context is not None:
field = field.bind(context)
if value is interfaces.NOT_CHANGED:
if (interfaces.IContextAware.providedBy(widget) and
not widget.ignoreContext):
# get value from context
value = zope.component.getMultiAdapter(
(context, field),
interfaces.IDataManager).query()
else:
value = interfaces.NO_VALUE
if value is interfaces.NO_VALUE
# look up default value
value = field.default
adapter = zope.component.queryMultiAdapter(
(context, request, view, field, widget),
interfaces.IValue, name='default')
if adapter:
value = adapter.get()
return field.validate(value)

Unless I am missing something, the above code should compute the same
value as z3c.form.widget.Widget.update would when ignoreRequest is True.
Thus effectively converting NOT_CHANGED into the "existing" value
before validating,

Hope this helps
- Jacob

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


mh at gocept

May 17, 2009, 6:21 AM

Post #4 of 4 (534 views)
Permalink
Re: z3c.form: Problem validating file uploads [In reply to]

Am 22.04.2009 um 14:48 schrieb Jacob Holm:
> Michael Howitz wrote:
[...]
>>> Anyone having an idea for a possibly working solution?
>> As I got no responsed, I'd like to put this issue into z3c.form's
>> bugtracker. But which is the correct one?
>> https://bugs.launchpad.net/zope3/ ?
>
> I don't know about the right tracker for this, but I think the right
> solution is 2) except that when widget.ignoreContext is True the
> default value should be looked up and validated instead. In other
> words, change z3c.form.validator.SimpleFieldValidator.validate to
> something like this (untested):

[snipped really good suggestion]

> Unless I am missing something, the above code should compute the
> same value as z3c.form.widget.Widget.update would when ignoreRequest
> is True. Thus effectively converting NOT_CHANGED into the
> "existing" value before validating,


Many thanks, Jacob. Your suggestion works very well. I implemented it
on my branch and merged it to the trunk.

Yours sincerely,
--
Michael Howitz · mh [at] gocept · software developer
gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 8 · fax +49 345 1229889 1
Zope and Plone consulting and development

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )

Zope dev RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.