def testCloneNamedFileBlobsInSchema(self): file_fti = DexterityFTI('BlobFile', model_source=""" <model xmlns="http://namespaces.plone.org/supermodel/schema"> <schema> <field name="file" type="plone.namedfile.field.NamedBlobFile"> <title>File</title> <required>True</required> </field> </schema> </model> """) self.portal.portal_types._setObject('BlobFile', file_fti) file1 = createContentInContainer(self.portal, 'BlobFile') file1.file = NamedBlobFile('dummy test data', filename=u'test.txt') modifier = CloneNamedFileBlobs('modifier', 'Modifier') attrs_dict = modifier.getReferencedAttributes(file1) self.assertTrue( 'plone.dexterity.schema.generated.plone_0_BlobFile.file' in attrs_dict) blob = attrs_dict.values()[0] self.assertTrue(IBlob.providedBy(blob)) file2 = createContentInContainer(self.portal, 'BlobFile') file2.file = NamedBlobFile('dummy test data', filename=u'test.txt') modifier.reattachReferencedAttributes(file2, attrs_dict) self.assertTrue(file2.file._blob is blob)
def get_file(blob): if IBlob.providedBy(blob): zodb_blob = blob else: return False file_path = zodb_blob.committed() return file_path
def testCloneNamedFileBlobsInSchema(self): file_fti = DexterityFTI( 'BlobFile', model_source=""" <model xmlns="http://namespaces.plone.org/supermodel/schema"> <schema> <field name="file" type="plone.namedfile.field.NamedBlobFile"> <title>File</title> <required>True</required> </field> </schema> </model> """) self.portal.portal_types._setObject('BlobFile', file_fti) file1 = createContentInContainer(self.portal, 'BlobFile') file1.file = NamedBlobFile('dummy test data', filename=u'test.txt') modifier = CloneNamedFileBlobs('modifier', 'Modifier') attrs_dict = modifier.getReferencedAttributes(file1) self.assertTrue( 'plone.dexterity.schema.generated.plone_0_BlobFile.file' in attrs_dict) blob = attrs_dict.values()[0] self.assertTrue(IBlob.providedBy(blob)) file2 = createContentInContainer(self.portal, 'BlobFile') file2.file = NamedBlobFile('dummy test data', filename=u'test.txt') modifier.reattachReferencedAttributes(file2, attrs_dict) self.assertTrue(file2.file._blob is blob)
def get_file(blob): if IBlob.providedBy(blob): zodb_blob = blob else: return False # TODO: Must be a way to get the filename without opening the file blob_file = zodb_blob.open() file_path = blob_file.name blob_file.close() return file_path
def get_file(blob): zodb_blob = None if HAS_NAMEDFILE and INamedBlobFile.providedBy(blob) and hasattr(blob, '_blob'): # HACK: uses internal knowledge but INamedBlobFile provides no way method # to get to the underlying blob zodb_blob = blob._blob elif IBlob.providedBy(blob): zodb_blob = blob if zodb_blob is None: return False else: file_path = zodb_blob.committed() return file_path
def testGettingStuffOut(self): # Getting stuff out of there works similarly: self.testPuttingInConnection() transaction2 = transaction.TransactionManager() connection2 = self.database.open(transaction_manager=transaction2) root = connection2.root() blob2 = root['myblob'] self.assertTrue(IBlob.providedBy(blob2)) # pylint:disable=no-value-for-parameter with blob2.open("r") as f: data = f.read() self.assertEqual(data, self.first_data) transaction2.abort() connection2.close()
def testCloneNamedFileBlobsInBehavior(self): configuration = """\ <configure package="plone.behavior" xmlns="http://namespaces.zope.org/zope" xmlns:plone="http://namespaces.plone.org/plone" i18n_domain="plone.behavior.tests"> <include package="plone.behavior" file="meta.zcml" /> <plone:behavior title="BlobFile behavior" description="A behavior" provides="plone.app.versioningbehavior.tests.test_modifiers.IBlobFile" factory="plone.behavior.AnnotationStorage" /> </configure> """ xmlconfig.xmlconfig(StringIO(configuration)) file_fti = DexterityFTI( 'BlobFile', behaviors=[IBlobFile.__identifier__]) self.portal.portal_types._setObject('BlobFile', file_fti) file1 = createContentInContainer(self.portal, 'BlobFile') IBlobFile(file1).file = NamedBlobFile('dummy test data', filename=u'test.txt') modifier = CloneNamedFileBlobs('modifier', 'Modifier') attrs_dict = modifier.getReferencedAttributes(file1) self.assertTrue( 'plone.app.versioningbehavior.tests.test_modifiers.IBlobFile.file' in attrs_dict) blob = attrs_dict.values()[0] self.assertTrue(IBlob.providedBy(blob)) file2 = createContentInContainer(self.portal, 'BlobFile') IBlobFile(file2).file = NamedBlobFile('dummy test data', filename=u'test.txt') modifier.reattachReferencedAttributes(file2, attrs_dict) self.assertTrue(IBlobFile(file2).file._blob is blob)
def testCloneNamedFileBlobsWithNoFile(self): file_fti = DexterityFTI( 'BlobFile', model_source=""" <model xmlns="http://namespaces.plone.org/supermodel/schema"> <schema> <field name="file" type="plone.namedfile.field.NamedBlobFile"> <title>File</title> <required>True</required> </field> </schema> </model> """) self.portal.portal_types._setObject('BlobFile', file_fti) file1 = createContentInContainer(self.portal, 'BlobFile') modifier = CloneNamedFileBlobs('modifier', 'Modifier') attrs_dict = modifier.getReferencedAttributes(file1) self.assertTrue(attrs_dict == {}) on_clone_modifiers = modifier.getOnCloneModifiers(file1) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) # Previous version without file but working copy has a file. self.portal.portal_repository.save(file1) file1.file = NamedBlobFile('dummy test data', filename=u'test.txt') attrs_dict = modifier.getReferencedAttributes(file1) self.assertTrue( 'plone.dexterity.schema.generated.plone_0_BlobFile.file' in attrs_dict) blob = attrs_dict.values()[0] self.assertTrue(IBlob.providedBy(blob)) on_clone_modifiers = modifier.getOnCloneModifiers(file1) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(file1.file._blob)) self.assertTrue(pers_load(file1.file._blob) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == [])
def testCloneNamedFileBlobsInBehavior(self): configuration = """\ <configure package="plone.behavior" xmlns="http://namespaces.zope.org/zope" xmlns:plone="http://namespaces.plone.org/plone" i18n_domain="plone.behavior.tests"> <include package="plone.behavior" file="meta.zcml" /> <plone:behavior title="BlobFile behavior" description="A behavior" provides="plone.app.versioningbehavior.tests.test_modifiers.IBlobFile" factory="plone.behavior.AnnotationStorage" /> </configure> """ xmlconfig.xmlconfig(StringIO(configuration)) file_fti = DexterityFTI('BlobFile', behaviors=[IBlobFile.__identifier__]) self.portal.portal_types._setObject('BlobFile', file_fti) file1 = createContentInContainer(self.portal, 'BlobFile') IBlobFile(file1).file = NamedBlobFile('dummy test data', filename=u'test.txt') modifier = CloneNamedFileBlobs('modifier', 'Modifier') attrs_dict = modifier.getReferencedAttributes(file1) self.assertTrue( 'plone.app.versioningbehavior.tests.test_modifiers.IBlobFile.file' in attrs_dict) blob = attrs_dict.values()[0] self.assertTrue(IBlob.providedBy(blob)) file2 = createContentInContainer(self.portal, 'BlobFile') IBlobFile(file2).file = NamedBlobFile('dummy test data', filename=u'test.txt') modifier.reattachReferencedAttributes(file2, attrs_dict) self.assertTrue(IBlobFile(file2).file._blob is blob)
def testCloneNamedFileBlobsWithNoFile(self): file_fti = DexterityFTI('BlobFile', model_source=""" <model xmlns="http://namespaces.plone.org/supermodel/schema"> <schema> <field name="file" type="plone.namedfile.field.NamedBlobFile"> <title>File</title> <required>True</required> </field> </schema> </model> """) self.portal.portal_types._setObject('BlobFile', file_fti) file1 = createContentInContainer(self.portal, 'BlobFile') modifier = CloneNamedFileBlobs('modifier', 'Modifier') attrs_dict = modifier.getReferencedAttributes(file1) self.assertTrue(attrs_dict == {}) on_clone_modifiers = modifier.getOnCloneModifiers(file1) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(None) is None) self.assertTrue(pers_load(None) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == []) # Previous version without file but working copy has a file. self.portal.portal_repository.save(file1) file1.file = NamedBlobFile('dummy test data', filename=u'test.txt') attrs_dict = modifier.getReferencedAttributes(file1) self.assertTrue( 'plone.dexterity.schema.generated.plone_0_BlobFile.file' in attrs_dict) blob = list(attrs_dict.values())[0] self.assertTrue(IBlob.providedBy(blob)) on_clone_modifiers = modifier.getOnCloneModifiers(file1) pers_id, pers_load, empty1, empty2 = on_clone_modifiers self.assertTrue(pers_id(file1.file._blob)) self.assertTrue(pers_load(file1.file._blob) is None) self.assertTrue(empty1 == []) self.assertTrue(empty2 == [])