Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add check for 'Keep existing file' #42

merged 3 commits into from Dec 3, 2019
Changes from all commits
File filter...
Filter file types
Jump to…
Jump to file or symbol
Failed to load files and symbols.


Just for now

@@ -0,0 +1 @@
set widget value to z3c.form.interfaces.NOT_CHANGED when the user selects 'Keep Existing File' in the widget, so z3c.form understands the field has not changed
@@ -8,6 +8,7 @@
from plone.namedfile.interfaces import INamedField
from plone.namedfile.utils import safe_basename
from z3c.form.converter import BaseDataConverter
from z3c.form.interfaces import NOT_CHANGED
from zope.component import adapts
from zope.schema.interfaces import IBytes
from ZPublisher.HTTPRequest import FileUpload
@@ -25,7 +26,10 @@ def toWidgetValue(self, value):
return value

def toFieldValue(self, value):

action = self.widget.request.get("%s.action" %, None)
if action == 'nochange':

if value is None or value == '':
return self.field.missing_value

@@ -451,12 +451,18 @@ instances and the two named file/image widgets::

>>> from zope.component import getMultiAdapter
>>> from z3c.form.interfaces import IDataConverter

>>> from z3c.form.interfaces import NOT_CHANGED
>>> file_converter = getMultiAdapter((IContent['file_field'], file_widget), IDataConverter)
>>> image_converter = getMultiAdapter((IContent['image_field'], image_widget), IDataConverter)

A value of None or '' results in the field's missing_value being returned::
An initial upload of a file will never include the action field,
so let's remove it from our test requests

>>> del file_widget.request.form['']
>>> del image_widget.request.form['']
A value of None or '' results in the field's missing_value being returned::
>>> file_converter.toFieldValue(u'') is IContent['file_field'].missing_value
>>> file_converter.toFieldValue(None) is IContent['file_field'].missing_value
@@ -526,6 +532,17 @@ being returned::
>>> field_value is IContent['image_field'].missing_value

If the file has already been uploaded and the user selects 'Keep Existing File'
in the widget, the widget will include 'action':'nochange' in the form post,
and the converter will always set the value to z3c.form.interfaces.NOT_CHANGED::

>>> file_widget.request.form[''] = 'nochange'
>>> file_converter.toFieldValue(u'') is NOT_CHANGED
>>> image_widget.request.form[''] = 'nochange'
>>> image_converter.toFieldValue(u'') is NOT_CHANGED

The Base64Converter for Bytes fields
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.