コード例 #1
0
ファイル: testFSS.py プロジェクト: LEAMgroup/iw.fss
    def testPatched(self):
        self.loginAsPortalOwner()

        # Create content
        content_id = 'test_file'
        file_content = self.addFileByFileUpload(self.test_folder, content_id)
        # Get file field
        file_field = file_content.getField('file')
        response = file_field.download(file_content, no_output = True)
        self.assertEqual(bool(objectImplements(IStreamIterator, response)), True)
        HTTP_RESPONSE = file_content.REQUEST.RESPONSE
        self.failUnless(HTTP_RESPONSE.headers.has_key('content-length'))
        ## reinit response headers
        file_content.REQUEST.RESPONSE.headers = {}
        response = file_field.download(file_content)
        self.assertEqual(bool(objectImplements(IStreamIterator, response)), True)
        self.failUnless(HTTP_RESPONSE.headers.has_key('content-length'))
コード例 #2
0
    def testPatched(self):
        self.loginAsPortalOwner()

        # Create content
        content_id = 'test_file'
        file_content = self.addFileByFileUpload(self.test_folder, content_id)
        # Get file field
        file_field = file_content.getField('file')
        response = file_field.download(file_content, no_output=True)
        self.assertEqual(bool(objectImplements(IStreamIterator, response)),
                         True)
        HTTP_RESPONSE = file_content.REQUEST.RESPONSE
        self.failUnless(HTTP_RESPONSE.headers.has_key('content-length'))
        ## reinit response headers
        file_content.REQUEST.RESPONSE.headers = {}
        response = file_field.download(file_content)
        self.assertEqual(bool(objectImplements(IStreamIterator, response)),
                         True)
        self.failUnless(HTTP_RESPONSE.headers.has_key('content-length'))
コード例 #3
0
def new_download(self, instance, REQUEST=None, RESPONSE=None, no_output=False):
    """Patch download for return an iterator instead of a string
    """

    file = self.get(instance, raw=True)
    if not REQUEST:
        REQUEST = aq_get(instance, 'REQUEST')
    if not RESPONSE:
        RESPONSE = REQUEST.RESPONSE
    RESPONSE = REQUEST.RESPONSE
    if no_output:
        if objectImplements(IStreamIterator, file):
            RESPONSE.setHeader("content-length", len(file))
    return old_download(self, instance, REQUEST, RESPONSE, no_output)
コード例 #4
0
ファイル: patches.py プロジェクト: LEAMgroup/iw.fss
def new_download(self, instance, REQUEST=None, RESPONSE=None,
                 no_output=False):
    """Patch download for return an iterator instead of a string
    """

    file = self.get(instance, raw=True)
    if not REQUEST:
        REQUEST = aq_get(instance, 'REQUEST')
    if not RESPONSE:
        RESPONSE = REQUEST.RESPONSE
    RESPONSE = REQUEST.RESPONSE
    if no_output:
        if objectImplements(IStreamIterator, file):
            RESPONSE.setHeader("content-length", len(file))
    return old_download(self, instance, REQUEST, RESPONSE,
                        no_output)
コード例 #5
0
ファイル: FileSystemStorage.py プロジェクト: mikejmets/iw.fss
    def set(self, name, instance, value, **kwargs):
        """Set value of a field"""

        # Ignore initialize process
        initializing = kwargs.get('_initializing_', False)
        if initializing:
            return
        # Remove acquisition wrappers
        value = aq_base(value)

        # Create File System Storage Info
        info = self.setFSSInfo(name, instance, value, **kwargs)
        # Wrap value
        if objectImplements(IObjectField, value):
            value = value.getRaw(self.instance)
        if objectImplements(IBaseUnit, value):
            value = value.getRaw()
        elif isinstance(value, File):
            value = value.data
        else:
            value = str(value)

        # Copy file on filesystem
        strategy = self.getStorageStrategy(name, instance)
        props = self.getStorageStrategyProperties(name, instance, info)

        if isinstance(value, FSSPdata):
            ## put all in temporory file
            fd, pathtemp = tempfile.mkstemp(prefix="tempfss")
            copy_file(value, pathtemp)
            value = filestream_iterator(pathtemp, mode='rb')
            strategy.setValueFile(value, **props)
            value.close()
            os.close(fd)
            rm_file(pathtemp)
        elif isinstance(value, Pdata):
            fd, pathtemp = tempfile.mkstemp(prefix="tempfss")
            f = open(pathtemp, 'wb')
            data = value
            while data is not None:
                f.write(data.data)
                data = data.next
            f.seek(0, 0)
            f.close()
            f = open(pathtemp, 'rb')
            strategy.setValueFile(f, **props)
            f.close()
            os.close(fd)
            rm_file(pathtemp)
        else:
            strategy.setValueFile(value, **props)

        # Create RDF file
        conf = self.getConf()
        is_rdf_enabled = conf.isRDFEnabled()
        rdf_script = conf.getRDFScript()

        if is_rdf_enabled:
            # Replace rdf file
            rdf_value = info.getRDFValue(name, instance, rdf_script)
            strategy.setRDFFile(rdf_value, **props)
コード例 #6
0
ファイル: FileSystemStorage.py プロジェクト: LEAMgroup/iw.fss
    def set(self, name, instance, value, **kwargs):
        """Set value of a field"""

        # Ignore initialize process
        initializing = kwargs.get('_initializing_', False)
        if initializing:
            return
        # Remove acquisition wrappers
        value = aq_base(value)

        # Create File System Storage Info
        info = self.setFSSInfo(name, instance, value, **kwargs)
        # Wrap value
        if objectImplements(IObjectField, value):
            value = value.getRaw(self.instance)
        if objectImplements(IBaseUnit, value):
            value = value.getRaw()
        elif isinstance(value, File):
            value = value.data
        else:
            value = str(value)

        # Copy file on filesystem
        strategy = self.getStorageStrategy(name, instance)
        props = self.getStorageStrategyProperties(name, instance, info)

        if isinstance(value, FSSPdata):
            ## put all in temporory file
            fd, pathtemp = tempfile.mkstemp(prefix="tempfss")
            copy_file(value, pathtemp)
            value = filestream_iterator(pathtemp, mode='rb')
            strategy.setValueFile(value, **props)
            value.close()
            os.close(fd)
            rm_file(pathtemp)
        elif isinstance(value, Pdata):
            fd, pathtemp = tempfile.mkstemp(prefix="tempfss")
            f = open(pathtemp,'wb')
            data = value
            while data is not None:
                f.write(data.data)
                data = data.next
            f.seek(0, 0)
            f.close()
            f = open(pathtemp,'rb')
            strategy.setValueFile(f, **props)
            f.close()
            os.close(fd)
            rm_file(pathtemp)
        else:
            strategy.setValueFile(value, **props)


        # Create RDF file
        conf = self.getConf()
        is_rdf_enabled = conf.isRDFEnabled()
        rdf_script = conf.getRDFScript()

        if is_rdf_enabled:
            # Replace rdf file
            rdf_value = info.getRDFValue(name, instance, rdf_script)
            strategy.setRDFFile(rdf_value, **props)