def testAttributeRenamingAndTransform(self): storage = AnnotationStorage() query = {} actions = ({"fieldName": "text", "newFieldName": "bodyText", "storage": storage, "transform": makeUpper},) self.execute(query, actions) self.assertEqual(storage.get("bodyText", self.folder["d1"]).getRaw(), "BODY ONE") self.assertEqual(storage.get("bodyText", self.folder["d2"]).getRaw(), "BODY TWO")
def testUnsetAttributeWithCustomQuery(self): storage = AnnotationStorage() query = {"getId": "d1"} actions = ({"fieldName": "text", "unset": True, "storage": storage},) self.execute(query, actions) self.assertEqual(storage.get("text", self.folder["d2"]).getRaw(), "Body two") self.assertRaises(AttributeError, storage.get, "text", self.folder["d1"])
def testAbortObject(self): storage = AnnotationStorage() query = {} actions = ({"fieldName": "text", "transform": makeUpper, "storage": storage},) self.execute(query, actions, conditionallyAbortObject) self.assertEqual(storage.get("text", self.folder["d1"]).getRaw(), "Body one") self.assertEqual(storage.get("text", self.folder["d2"]).getRaw(), "BODY TWO")
def unset(self, name, instance, **kwargs): aws_utility = getUtility(IAWSFileClientUtility) if not aws_utility.active(): return AnnotationStorage.unset(self, name, instance, **kwargs) file_ = self.get(name, instance, **kwargs) if isinstance(file_, AWSFile): file_.remove_source() AnnotationStorage.unset(self, name, instance, **kwargs)
def testAttributeRenaming(self): storage = AnnotationStorage() query = {} actions = ({"fieldName": "text", "newFieldName": "bodyText", "storage": storage},) self.execute(query, actions) self.assertEqual(storage.get("bodyText", self.folder["d1"]).getRaw(), "Body one") self.assertEqual(storage.get("bodyText", self.folder["d2"]).getRaw(), "Body two") self.assertRaises(AttributeError, storage.get, "text", self.folder["d1"])
def testAbortObject(self): storage = AnnotationStorage() query = {} actions = ({'fieldName' : 'text', 'transform' : makeUpper, 'storage' : storage, },) self.execute(query, actions, conditionallyAbortObject) self.assertEqual(storage.get('text', self.folder['d1']).getRaw(), 'Body one') self.assertEqual(storage.get('text', self.folder['d2']).getRaw(), 'BODY TWO')
def testUnsetAttributeWithCustomQuery(self): storage = AnnotationStorage() query = {'getId' : 'd1'} actions = ({'fieldName' : 'text', 'unset' : True, 'storage' : storage, },) self.execute(query, actions) self.assertEqual(storage.get('text', self.folder['d2']).getRaw(), 'Body two') self.assertRaises(AttributeError, storage.get, 'text', self.folder['d1'])
def testTransform(self): storage = AnnotationStorage() query = {} actions = ({'fieldName' : 'text', 'storage' : storage, 'transform' : makeUpper },) self.execute(query, actions) self.assertEqual(storage.get('text', self.folder['d1']).getRaw(), 'BODY ONE') self.assertEqual(storage.get('text', self.folder['d2']).getRaw(), 'BODY TWO')
def testTransform(self): storage = AnnotationStorage() query = {} actions = ({'fieldName' : 'text', 'storage' : storage, 'transform' : makeUpper },) self.execute(query, actions) self.assertEqual(storage.get('text', self.folder['d1']).getRaw(), 'BODY ONE') self.assertEqual(storage.get('text', self.folder['d2']).getRaw(), 'BODY TWO')
def testAbortObject(self): storage = AnnotationStorage() query = {} actions = ({'fieldName' : 'text', 'transform' : makeUpper, 'storage' : storage, },) self.execute(query, actions, conditionallyAbortObject) self.assertEqual(storage.get('text', self.folder['d1']).getRaw(), 'Body one') self.assertEqual(storage.get('text', self.folder['d2']).getRaw(), 'BODY TWO')
def unset(self, name, instance, **kwargs): (client, ks) = kconnect() mediaEntry = instance.KalturaObject try: client.media.delete(mediaEntry.getId) except: #XXX ENTRY_ID_NOT_FOUND exception, specifically pass AnnotationStorage.unset(self, name, instance, **kwargs)
def testUnsetAttributeWithCustomQuery(self): storage = AnnotationStorage() query = {'getId' : 'd1'} actions = ({'fieldName' : 'text', 'unset' : True, 'storage' : storage, },) self.execute(query, actions) self.assertEqual(storage.get('text', self.folder['d2']).getRaw(), 'Body two') with self.assertRaises(AttributeError): storage.get('text', self.folder['d1'])
def _migration(self, name, instance, **kwargs): """Migrates data from the original storage """ value = getattr(aq_base(instance), name, _marker) if value is _marker: raise AttributeError(name) delattr(instance, name) # we use set method from base class to prevent migration to aws AnnotationStorage.set(self, name, instance, value, **kwargs) return value
def testAttributeRenaming(self): storage = AnnotationStorage() query = {} actions = ({'fieldName' : 'text', 'newFieldName' : 'bodyText', 'storage' : storage },) self.execute(query, actions) self.assertEqual(storage.get('bodyText', self.folder['d1']).getRaw(), 'Body one') self.assertEqual(storage.get('bodyText', self.folder['d2']).getRaw(), 'Body two') self.assertRaises(AttributeError, storage.get, 'text', self.folder['d1'])
def testAttributeRenaming(self): storage = AnnotationStorage() query = {} actions = ({'fieldName' : 'text', 'newFieldName' : 'bodyText', 'storage' : storage },) self.execute(query, actions) self.assertEqual(storage.get('bodyText', self.folder['d1']).getRaw(), 'Body one') self.assertEqual(storage.get('bodyText', self.folder['d2']).getRaw(), 'Body two') self.assertRaises(AttributeError, storage.get, 'text', self.folder['d1'])
def testNewStorageOnly(self): storage = AnnotationStorage() newStorage = AttributeStorage() query = {} actions = ({"fieldName": "text", "storage": storage, "newStorage": newStorage},) self.execute(query, actions) self.assertEqual(getattr(self.folder["d1"], "text").getRaw(), "Body one") self.assertEqual(getattr(self.folder["d2"], "text").getRaw(), "Body two") try: storage.get("text", self.folder["d1"]) except AttributeError: pass else: self.fail()
def get(self, name, instance, **kwargs): """XXX TODO Retrieve video from Kaltura, wrap it in a blob wrapper, and return it """ value = AnnotationStorage.get(self, name, instance, **kwargs) #get video file from Kaltura and replace the file in the blob. return value
def testNewStorageOnly(self): storage = AnnotationStorage() newStorage = AttributeStorage() query = {} actions = ({'fieldName' : 'text', 'storage' : storage, 'newStorage' : newStorage },) self.execute(query, actions) self.assertEqual(getattr(self.folder['d1'], 'text').getRaw(), 'Body one') self.assertEqual(getattr(self.folder['d2'], 'text').getRaw(), 'Body two') try: storage.get('text', self.folder['d1']) except AttributeError: pass else: self.fail()
def testNewStorageOnly(self): storage = AnnotationStorage() newStorage = AttributeStorage() query = {} actions = ({'fieldName' : 'text', 'storage' : storage, 'newStorage' : newStorage },) self.execute(query, actions) self.assertEqual(getattr(self.folder['d1'], 'text').getRaw(), 'Body one') self.assertEqual(getattr(self.folder['d2'], 'text').getRaw(), 'Body two') try: storage.get('text', self.folder['d1']) except AttributeError: pass else: self.fail()
def set(self, name, instance, value, **kwargs): """Store video on Kaltura, create media entry if required """ initializing = kwargs.get('_initializing_', False) if initializing: AnnotationStorage.set(self, name, instance, value, **kwargs) return self.value = aq_base(value) if self.value.filename is None: return #only interested in running set when instance is ready to save. #get a filehandle for the video content we are uploading to Kaltura Server fh_blob = openBlob(self.value.blob, mode='r') #find the temp dir that ZODB is using. tempdir = os.path.dirname(fh_blob.name) #connect to Kaltura Server (client, ks) = kconnect() #upload video content. token = KalturaUploadToken() token = client.uploadToken.add(token) token = client.uploadToken.upload(token.getId(), fh_blob) fh_blob.close() #instance needs to know the upload token to finalize the media entry # typically, a call to Kaltura's addFromUploadedFile or updateContent services does this. instance.uploadToken = token instance.fileChanged = True #if "no local storage" is set, we clobber the blob file. registry = getUtility(IRegistry) settings = registry.forInterface(IRfaKalturaSettings) if settings.storageMethod == u"No Local Storage": filename_aside = self.makeDummyData(dir=tempdir) value.blob.consumeFile(filename_aside) AnnotationStorage.set(self, name, instance, value, **kwargs)
def testCallAfterAttribute(self): storage = AnnotationStorage() lst = [] query = {} actions = ({'fieldName' : 'text', 'transform' : makeUpper, 'storage' : storage, 'callAfter' : callAfterAttribute },) self.execute(query, actions, lst = lst) lst.sort() self.assertEqual(lst, ['d1: text = BODY ONE', 'd2: text = BODY TWO'])
def get(self, name, instance, **kwargs): aws_utility = getUtility(IAWSFileClientUtility) if not aws_utility.active(): return AnnotationStorage.get(self, name, instance, **kwargs) file_ = AnnotationStorage.get(self, name, instance, **kwargs) request = instance.REQUEST if not isinstance(request, type('')) and \ request.get('%s_migrate' % name, '') or \ ('migrate' in kwargs and kwargs['migrate']): # check if object is already migrated if isinstance(file_, AWSFile): return file_ try: new_file_ = self._do_migrate(file_, instance) except (FileClientRemoveError, FileClientStoreError): return file_ AnnotationStorage.set(self, name, instance, new_file_, **kwargs) return new_file_ else: return file_
def testNewStorageAndAttribute(self): storage = AnnotationStorage() newStorage = AttributeStorage() query = {} actions = ({'fieldName' : 'text', 'newFieldName' : 'bodyText', 'storage' : storage, 'newStorage' : newStorage },) self.execute(query, actions) self.assertEqual(getattr(self.folder['d1'], 'bodyText').getRaw(), 'Body one') self.assertEqual(getattr(self.folder['d2'], 'bodyText').getRaw(), 'Body two') self.assertRaises(AttributeError, storage.get, 'text', self.folder['d1'])
AnnotationStorage.set(self, name, instance, file_, **kwargs) else: if value.size: file_ = AWSFile(name) try: self.update_source(file_, value.data, instance, filename, content_type, width, height) except (FileClientRemoveError, FileClientStoreError), e: request = instance.REQUEST IStatusMessage(request).addStatusMessage( u"Couldn't update %s file to storage. %s" % (safe_unicode(filename), safe_unicode(e.message)), type='error') AnnotationStorage.set(self, name, instance, value, **kwargs) else: AnnotationStorage.set(self, name, instance, file_, **kwargs) else: AnnotationStorage.set(self, name, instance, file_, **kwargs) security.declarePrivate('unset') def unset(self, name, instance, **kwargs): aws_utility = getUtility(IAWSFileClientUtility) if not aws_utility.active(): return AnnotationStorage.unset(self, name, instance, **kwargs) file_ = self.get(name, instance, **kwargs) if isinstance(file_, AWSFile): file_.remove_source()
def set(self, name, instance, value, **kwargs): """Set a value under the key 'name' for retrevial by/for instance.""" # collect value info filename = getattr(value, 'filename', '') content_type = getattr(value, 'content_type', '') width = getattr(value, 'width', '') height = getattr(value, 'height', '') aws_utility = getUtility(IAWSFileClientUtility) if not aws_utility.active(): if isinstance(value, AWSFile): # use default OFS.Image or OFS.File if width and height: # we have image value = Image(value.id(), '', str(value.data), content_type=content_type) else: value = File(value.id(), '', str(value.data), content_type=content_type) setattr(value, 'filename', filename) AnnotationStorage.set(self, name, instance, value, **kwargs) return try: file_ = self.get(name, instance, **kwargs) except AttributeError: file_ = None if file_: if isinstance(file_, AWSFile): try: self.update_source(file_, value.data, instance, filename, content_type, width, height) except (FileClientRemoveError, FileClientStoreError), e: request = instance.REQUEST IStatusMessage(request).addStatusMessage( u"Couldn't update %s file to storage. %s" % (safe_unicode(filename), safe_unicode(e.message)), type='error') if isinstance(value, AWSFile): # use default OFS.Image or OFS.File if width and height: # we have image value = Image(value.id(), '', str(value.data), content_type=content_type) else: value = File(value.id(), '', str(value.data), content_type=content_type) setattr(value, 'filename', filename) AnnotationStorage.set(self, name, instance, value, **kwargs) else: # clean up data after update setattr(file_, 'data', '') else: try: file_ = self._do_migrate(file_, instance, data=value.data, filename=filename, content_type=content_type, width=width, height=height) except (FileClientRemoveError, FileClientStoreError): request = instance.REQUEST IStatusMessage(request).addStatusMessage( u"Couldn't update %s file to storage. %s" % (safe_unicode(filename), safe_unicode(e.message)), type='error') AnnotationStorage.set(self, name, instance, value, **kwargs) else: AnnotationStorage.set(self, name, instance, file_, **kwargs)