def set(self, instance, value, **kwargs): """ use input value to populate the blob and set the associated file name and mimetype. the latter can be overridden by an option "mimetype" keyword argument """ if value in ('DELETE_FILE', 'DELETE_IMAGE'): super(BlobField, self).unset(instance, **kwargs) return # create a new blob instead of modifying the old one to # achieve copy-on-write semantics blob = BlobWrapper(self.default_content_type) if isinstance(value, basestring): value = StringIO(value) # simple strings cannot be adapted... setattr(value, 'filename', kwargs.get('filename', None)) if value is not None: blobbable = IBlobbable(value) try: blobbable.feed(blob.getBlob()) except ReuseBlob, exception: blob.setBlob(exception.args[0]) # reuse the given blob mimetype = kwargs.get('mimetype', None) if not mimetype: mimetype = blobbable.mimetype() if mimetype and mimetype != 'None': blob.setContentType(mimetype) blob.setFilename(kwargs.get('filename', blobbable.filename()))
def set(self, instance, value, **kwargs): """ use input value to populate the blob and set the associated file name and mimetype. the latter can be overridden by an option "mimetype" keyword argument """ if value in ('DELETE_FILE', 'DELETE_IMAGE'): super(BlobField, self).unset(instance, **kwargs) return # create a new blob instead of modifying the old one to # achieve copy-on-write semantics blob = BlobWrapper(self.default_content_type) if isinstance(value, six.string_types): value = StringIO(value) # simple strings cannot be adapted... setattr(value, 'filename', kwargs.get('filename', None)) if value is not None: blobbable = IBlobbable(value) try: blobbable.feed(blob.getBlob()) except ReuseBlob as exception: blob.setBlob(exception.args[0]) # reuse the given blob mimetype = kwargs.get('mimetype', None) if not mimetype: mimetype = blobbable.mimetype() if mimetype and mimetype != 'None': blob.setContentType(mimetype) blob.setFilename(kwargs.get('filename', blobbable.filename())) super(BlobField, self).set(instance, blob, **kwargs) # a transaction savepoint is created after setting the blob's value # in order to make it available at its temporary path (e.g. to index # pdfs etc using solr & tika within the same transaction) savepoint(optimistic=True)
def testBlobbableOFSFileWithoutFileName(self): obj = File('foo', 'Foo', getFile('plone.pdf'), 'application/pdf') blobbable = IBlobbable(obj) target = Blob() blobbable.feed(target) self.assertEqual(target.open('r').read(), getFile('plone.pdf').read()) self.assertEqual(blobbable.filename(), '') self.assertEqual(blobbable.mimetype(), 'application/pdf')
def testBlobbableOFSImage(self): gif = getImage() obj = Image('foo', 'Foo', StringIO(gif)) obj.filename = 'foo.gif' blobbable = IBlobbable(obj) target = Blob() blobbable.feed(target) self.assertEqual(target.open('r').read(), gif) self.assertEqual(blobbable.filename(), 'foo.gif') self.assertEqual(blobbable.mimetype(), 'image/gif')
def testBlobbableBinaryFile(self): _file = os.path.join(os.path.dirname(__file__), 'data', 'image.gif') with open(_file, 'rb') as f: obj = Binary(f) obj.filename = 'image.gif' blobbable = IBlobbable(obj) target = Blob() blobbable.feed(target) self.assertEqual(target.open('r').read(), getFile('image.gif').read()) self.assertEquals(blobbable.filename(), 'image.gif') self.assertEquals(blobbable.mimetype(), 'image/gif')
def testBlobbableBinaryFile(self): _file = os.path.join(os.path.dirname(__file__), 'data', 'image.gif') with open(_file, 'rb') as f: obj = Binary(f) obj.filename = 'image.gif' blobbable = IBlobbable(obj) target = Blob() blobbable.feed(target) self.assertEqual( target.open('r').read(), getFile('image.gif').read()) self.assertEquals(blobbable.filename(), 'image.gif') self.assertEquals(blobbable.mimetype(), 'image/gif')
def set(self, instance, value, **kwargs): """ use input value to populate the blob and set the associated file name and mimetype """ if value == "DELETE_FILE": ObjectField.unset(self, instance, **kwargs) return # create a new blob instead of modifying the old one to # achieve copy-on-write semantics. if isinstance(value, basestring): # make StringIO from string, because StringIO may be adapted to Blobabble value = StringIO(value) if value is not None: blobbable = IBlobbable(value) #move blob ctor down to where we know the mimetype blob = BlobWrapper(blobbable.mimetype()) blobbable.feed(blob.getBlob()) blob.setContentType(blobbable.mimetype()) blob.setFilename(blobbable.filename()) ObjectField.set(self, instance, blob, **kwargs) self.fixAutoId(instance)