def toFieldValue(self, value): """See interfaces.IDataConverter""" if value is None or value == '': # When no new file is uploaded, send a signal that we do not want # to do anything special. return interfaces.NOT_CHANGED if isinstance(value, zope.publisher.browser.FileUpload): # By default a IBytes field is used for get a file upload widget. # But interfaces extending IBytes do not use file upload widgets. # Any way if we get a FileUpload object, we'll convert it. # We also store the additional FileUpload values on the widget # before we loose them. self.widget.headers = value.headers self.widget.filename = value.filename try: seek = value.seek read = value.read except AttributeError as e: raise ValueError(_('Bytes data are not a file object'), e) else: seek(0) data = read() if data or getattr(value, 'filename', ''): return data else: return self.field.missing_value else: return util.toBytes(value)