def extract(self, default=interfaces.NOVALUE): context = self.context if hasattr(context, 'data') and IFile.providedBy(context.data): # NOTE: change disablePreview, even if no new file is uploaded file_data = removeSecurityProxy(context).data file_data.disablePreview = str2bool( self.disable_preview_widget.value[0]) file_data.disablePrint = str2bool( self.disable_print_widget.value[0]) fileUpload = self.request.get(self.name, default) if self.canUnload: unload = self.unload_widget.extract(default) if fileUpload is default or not fileUpload: if unload is default: return default else: if unload[0] == u'true': return fileDataClear return default else: if fileUpload is default or not fileUpload: return default if isinstance(fileUpload, FileUpload) or \ isinstance(fileUpload, FileType): return FileData(fileUpload) else: return default
def getPreviewSize(self, object=None): if object is None or not IFile.providedBy(object): return oid = self._getOid(object) if oid is None: return if oid in self.records: return self.records[oid].previewSize
def set(self, object, value, _getattr=getattr, _setattr=setattr): if self.readonly: raise TypeError("Can't set values on read-only fields " "(name=%s, class=%s.%s)" % (self.__name__, object.__class__.__module__, object.__class__.__name__)) if IFile.providedBy(value): _setattr(object, self.__name__, value) elif IFileData.providedBy(value): data = _getattr(object, self.__name__, None) if not IFile.providedBy(data): data = File() data.data = value.data data.mimeType = value.mimeType data.filename = value.filename data.disablePreview = value.disablePreview data.disablePrint = value.disablePrint _setattr(object, self.__name__, data) else: data = removeSecurityProxy(data) data.data = value.data data.mimeType = value.mimeType data.filename = value.filename data.disablePreview = value.disablePreview data.disablePrint = value.disablePrint _setattr(object, self.__name__, data) notify(ObjectModifiedEvent(data)) elif IFileDataClear.providedBy(value): data = _getattr(object, self.__name__, None) if IFile.providedBy(data): data.clear() else: _setattr(object, self.__name__, File()) elif IFileDataNoValue.providedBy(value): pass else: self.set(object, FileData(value), _getattr, _setattr)
def get(self, object, _getattr=getattr, _setattr=setattr): value = _getattr(object, self.__name__, None) if IFile.providedBy(value): return value elif value is None: value = u'' self.set(object, value, _getattr, _setattr) return self.get(object, _getattr, _setattr) raise AttributeError(self.__name__)
def get(self, object, _getattr=getattr, _setattr=setattr): value = _getattr(object, self.__name__, None) if IImage.providedBy(value): return value elif IFile.providedBy(value): self.set(object, value.data, _getattr, _setattr) return self.get(object, _getattr, _setattr) elif value is None: value = u'' self.set(object, value, _getattr, _setattr) return self.get(object, _getattr, _setattr)
def remove(self, object=None): if object is None or not IFile.providedBy(object): return oid = self._getOid(object) if oid is None: return record = self.records.get(oid, None) if record: # event.notify(PreviewRecordRemovedEvent(object, record)) del self.records[oid]
def getPreview(self, object=None): """ returns preview from records """ if object is None or not IFile.providedBy(object): return oid = self._getOid(object) if oid is None: return if 'always' in self.generateMethod: self.add(object) if oid in self.records: # NOTE: records[oid]:parent, previewSize, _previewBlob, previewData return self.records[oid]
def add(self, object=None): if object is None or not IFile.providedBy(object): return oid = self._getOid(object) if oid is None: return preview = PreviewRecord() preview.parent = object preview.generatePreview() # NOTE: do not add if object.mimeType is empty if object.mimeType: self.records[oid] = preview
def check(self, object=None, allow_auto_generate=True): if object is None or not IFile.providedBy(object): return oid = self._getOid(object) if oid is None: return if oid in self.records and self.records[oid].previewSize > 0: return True else: if allow_auto_generate and ('check' in self.generateMethod): self.add(object) # NOTE: there is no oid in self.records if file is missing if self.records.has_key(oid) and \ self.records[oid].previewSize > 0: return True return False
def set(self, value): """See z3c.form.interfaces.IDataManager""" if self.field.readonly: raise TypeError("Can't set values on read-only fields " "(name=%s, class=%s.%s)" % (self.field.__name__, self.context.__class__.__module__, self.context.__class__.__name__)) if not (IFile.providedBy(value) or IFileData.providedBy(value) or IFileDataClear.providedBy(value)): return # get the right adapter or context context = removeSecurityProxy(self.context) if self.field.interface is not None: context = self.field.interface(context) field = self.field.bind(context) field.set(context, value)
def _validate(self, value): if (IFileDataNoValue.providedBy(value) or not value) and self.required: raise RequiredMissing() if IFileDataClear.providedBy(value) or \ IFileDataNoValue.providedBy(value): return super(FileField, self)._validate(value) if not (IFile.providedBy(value) or IFileData.providedBy(value)): raise WrongType(value, (IFile, IFileData)) if self.mimeTypes: mt1, mt2 = value.mimeType.split('/') sec = self.mts.get(mt1) if sec: if '*' in sec: return elif mt2 in sec: return raise NotAllowedFileType(value.mimeType, self.mimeTypes)