Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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)
Пример #4
0
    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__)
Пример #5
0
    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)
Пример #6
0
    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]
Пример #7
0
    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]
Пример #8
0
    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
Пример #9
0
    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
Пример #10
0
    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)
Пример #11
0
    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)