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'))
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'))
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)
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)
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)