def impersonate_client(self, partner_id): global ks self.get_kaltura_session() # generate KS in case that not existed or expired clone_client = KalturaClient(self.config) clone_client.setPartnerId(partner_id) clone_client.setKs(self.ks) return clone_client
def kconnect(partner_id=None): creds = getCredentials() if partner_id is not None: creds['PARTNER_ID'] = partner_id privacyString = '' #may want to add 'disableentitlements' to the privacyString eventuall for users who want to # disable all entitlement checking if creds.get('PRIVACY_CONTEXT', '') not in ('', None): privacyString = 'privacycontext:' + creds['PRIVACY_CONTEXT'] config = KalturaConfiguration(creds['PARTNER_ID']) config.serviceUrl = creds['SERVICE_URL'] config.setLogger(KalturaLoggerInstance) client = KalturaClient(config) # start new session ks = client.generateSession(creds['ADMIN_SECRET'], creds['USER_NAME'], KalturaSessionType.ADMIN, creds['PARTNER_ID'], 86400, privacyString) client.setKs(ks) return (client, ks)
def getClient(self, partnerId, tokenId, appToken): config = KalturaConfiguration(partnerId) config.serviceUrl = "https://www.kaltura.com/" client = KalturaClient(config) # generate a widget session in order to use the app token widgetId = "_" + str(partnerId) expiry = 864000 # 864000 = If this is seconds that's about 10 days. # It is not in milliseconds (=14.4 minutes); a manual test continued to work after an hour of construction # 864000 is the value used in these demos- # https://developer.kaltura.com/api-docs/VPaaS-API-Getting-Started/introduction-kaltura-client-libraries.html # This suggests it is probably seconds, because 1 second is the min and 10 years is the max # https://developer.kaltura.com/api-docs/VPaaS-API-Getting-Started/Kaltura_API_Authentication_and_Security.html result = client.session.startWidgetSession(widgetId, expiry) client.setKs(result.ks) # generate token hash from ks + appToken tokenHash = hashlib.sha256( result.ks.encode('ascii') + appToken.encode('ascii')).hexdigest() # start an app token session result = client.appToken.startSession(tokenId, tokenHash, '', '', expiry) client.setKs(result.ks) return client
def impersonate_client(self, partner_id): global ks self.get_kaltura_session( ) # generate KS in case that not existed or expired clone_client = KalturaClient(self.config) clone_client.setPartnerId(partner_id) clone_client.setKs(self.ks) return clone_client
def client_for_user(username, privileges): kaltura_config = KalturaConfiguration(config.partner_id) kaltura_config.serviceUrl = "https://www.kaltura.com/" client = KalturaClient(kaltura_config) ks = client.session.start(config.admin_secret, username, KalturaSessionType.USER, config.partner_id, 86400, privileges) client.setKs(ks) return client
def init_kaltura(conf): config = KalturaConfiguration(conf[KALTURA][PARTNER_ID]) config.serviceUrl = SERVICE_URL retclient = KalturaClient(config) ks = retclient.session.start(conf[KALTURA][ADMIN_SECRET], conf[KALTURA][USER_ID], KalturaSessionType.ADMIN, conf[KALTURA][PARTNER_ID]) retclient.setKs(ks) return retclient
def reencode_profile(media_id, conversion_id, clientObj=None): #Todo Separate this out into a decorator if clientObj: client = clientObj else: client = KalturaClient(GetConfig()) ks = client.session.start(SETTINGS['ADMIN_SECRET'], SETTINGS['USER_NAME'], KalturaSessionType.ADMIN, SETTINGS['PARTNER_ID'], 86400, "") client.setKs(ks) entry = client.media.get(media_id) client.media.convert(media_id, conversion_id)
class MultiRequestTests(KalturaBaseTest): def setUp(self): """These tests require that client.session.start be used Instead of self.client.generateSession TODO: Document Why """ self.config = GetConfig() self.client = KalturaClient(self.config) self.ks = None def test_MultiRequest(self): """From lines 221- 241 of origional PythonTester.py""" self.client.startMultiRequest() ks = self.client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") self.client.setKs(ks) listResult = self.client.baseEntry.list() multiResult = self.client.doMultiRequest() print multiResult[1].totalCount self.client.setKs(multiResult[0]) # error try: mediaEntry = self.client.media.get('invalid entry id') assert(False) except KalturaException, e: assert(e.code == 'ENTRY_ID_NOT_FOUND') # multi request error self.client = KalturaClient(GetConfig()) #start a NEW multirequest (could move to separate unit test?) self.client.startMultiRequest() ks = self.client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") self.client.setKs(ks) mediaEntry = self.client.media.get('invalid entry id') multiResult = self.client.doMultiRequest() self.client.setKs(multiResult[0]) assert(isinstance(multiResult[1], KalturaException)) assert(multiResult[1].code == 'ENTRY_ID_NOT_FOUND') #must be called with existing client multirequest session self._AdvancedMultiRequestExample()
class MultiRequestTests(KalturaBaseTest): def setUp(self): """These tests require that client.session.start be used Instead of self.client.generateSession TODO: Document Why """ self.config = GetConfig() self.client = KalturaClient(self.config) self.ks = None def test_MultiRequest(self): """From lines 221- 241 of origional PythonTester.py""" self.client.startMultiRequest() ks = self.client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") self.client.setKs(ks) listResult = self.client.baseEntry.list() multiResult = self.client.doMultiRequest() print multiResult[1].totalCount self.client.setKs(multiResult[0]) # error try: mediaEntry = self.client.media.get('invalid entry id') assert (False) except KalturaException, e: assert (e.code == 'ENTRY_ID_NOT_FOUND') # multi request error self.client = KalturaClient(GetConfig()) #start a NEW multirequest (could move to separate unit test?) self.client.startMultiRequest() ks = self.client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") self.client.setKs(ks) mediaEntry = self.client.media.get('invalid entry id') multiResult = self.client.doMultiRequest() self.client.setKs(multiResult[0]) assert (isinstance(multiResult[1], KalturaException)) assert (multiResult[1].code == 'ENTRY_ID_NOT_FOUND') #must be called with existing client multirequest session self._AdvancedMultiRequestExample()
def create_session(kaltura_id, ks=None): settings = properties.load_kaltura_settings().get(kaltura_id) if not settings: raise Exception("Kaltura ID %s Settings %s" % (kaltura_id, settings)) client = KalturaClient(GetConfig(settings)) if not settings: raise Exception("Kaltura ID %s not in session %s" % ( kaltura_id, repr(settings))) if not ks: ks = get_new_session_key(settings) client.setKs(ks) return client
def create_session(kaltura_id, ks=None): settings = properties.load_kaltura_settings().get(kaltura_id) if not settings: raise Exception("Kaltura ID %s Settings %s" % (kaltura_id, settings)) client = KalturaClient(GetConfig(settings)) if not settings: raise Exception("Kaltura ID %s not in session %s" % (kaltura_id, repr(settings))) if not ks: ks = get_new_session_key(settings) client.setKs(ks) return client
def delete(idx): config = KalturaConfiguration(3082203) config.serviceUrl = "https://www.kaltura.com/" client = KalturaClient(config) ks = client.session.start(os.environ.get('KALTURA_SECRET'), "*****@*****.**", KalturaSessionType.ADMIN, "3082203") client.setKs(ks) entry_id = idx result = client.media.delete(entry_id) print(result)
def get_entry(entry_id): config = KalturaConfiguration(3082203) config.serviceUrl = "https://www.kaltura.com/" client = KalturaClient(config) ks = client.session.start(os.environ.get('KALTURA_SECRET'), "*****@*****.**", KalturaSessionType.ADMIN, "3082203") client.setKs(ks) version = -1 result = client.media.get(entry_id, version) return result.json()
def _AdvancedMultiRequestExample(self): #this is a separate, local client - not 'self.client' client = KalturaClient( self.config) #matches line 154 in PythonTester.py client.startMultiRequest() from KalturaClient.Plugins.Core import KalturaMixEntry from KalturaClient.Plugins.Core import KalturaEditorType # Request 1 ks = client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs( ks ) # for the current multi request, the result of the first call will be used as the ks for next calls mixEntry = KalturaMixEntry() mixEntry.setName(".Net Mix %s" % (testString, )) mixEntry.setEditorType(KalturaEditorType.SIMPLE) # Request 2 mixEntry = client.mixing.add(mixEntry) # Request 3 ulFile = getTestFile('DemoVideo.flv') uploadTokenId = client.media.upload(ulFile) mediaEntry = KalturaMediaEntry() mediaEntry.setName("Media Entry For Mix %s" % (testString, )) mediaEntry.setMediaType(KalturaMediaType.VIDEO) # Request 4 mediaEntry = client.media.addFromUploadedFile(mediaEntry, uploadTokenId) # Request 5 client.mixing.appendMediaEntry(mixEntry.id, mediaEntry.id) response = client.doMultiRequest() for subResponse in response: if isinstance(subResponse, KalturaException): self.fail("Error occurred: " + subResponse.message) # when accessing the response object we will use an index and not the response number (response number - 1) assert (isinstance(response[1], KalturaMixEntry)) mixEntry = response[1] print "The new mix entry id is: " + mixEntry.id
def add_media(): config = KalturaConfiguration(3082203) config.serviceUrl = "https://www.kaltura.com/" client = KalturaClient(config) ks = client.session.start(os.environ.get('KALTURA_SECRET'), "*****@*****.**", KalturaSessionType.ADMIN, "3082203") client.setKs(ks) entry = KalturaMediaEntry() entry.sourceType = KalturaSourceType.URL entry.searchProviderType = KalturaSearchProviderType.YOUTUBE entry.mediaType = KalturaMediaType.VIDEO result = client.media.add(entry) print(result)
def _AdvancedMultiRequestExample(self): #this is a separate, local client - not 'self.client' client = KalturaClient(self.config) #matches line 154 in PythonTester.py client.startMultiRequest() from KalturaClient.Plugins.Core import KalturaMixEntry from KalturaClient.Plugins.Core import KalturaEditorType # Request 1 ks = client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs(ks) # for the current multi request, the result of the first call will be used as the ks for next calls mixEntry = KalturaMixEntry() mixEntry.setName(".Net Mix %s" % (testString,)) mixEntry.setEditorType(KalturaEditorType.SIMPLE) # Request 2 mixEntry = client.mixing.add(mixEntry) # Request 3 ulFile = getTestFile('DemoVideo.flv') uploadTokenId = client.media.upload(ulFile) mediaEntry = KalturaMediaEntry() mediaEntry.setName("Media Entry For Mix %s" % (testString,)) mediaEntry.setMediaType(KalturaMediaType.VIDEO) # Request 4 mediaEntry = client.media.addFromUploadedFile(mediaEntry, uploadTokenId) # Request 5 client.mixing.appendMediaEntry(mixEntry.id, mediaEntry.id) response = client.doMultiRequest() for subResponse in response: if isinstance(subResponse, KalturaException): self.fail("Error occurred: " + subResponse.message) # when accessing the response object we will use an index and not the response number (response number - 1) assert(isinstance(response[1], KalturaMixEntry)) mixEntry = response[1] print "The new mix entry id is: " + mixEntry.id
def AdvancedMultiRequestExample(): client = KalturaClient(GetConfig()) client.startMultiRequest() # Request 1 ks = client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs( ks ) # for the current multi request, the result of the first call will be used as the ks for next calls mixEntry = KalturaMixEntry() mixEntry.setName(".Net Mix") mixEntry.setEditorType(KalturaEditorType.SIMPLE) # Request 2 mixEntry = client.mixing.add(mixEntry) # Request 3 uploadTokenId = client.media.upload(file('DemoVideo.flv', 'rb')) mediaEntry = KalturaMediaEntry() mediaEntry.setName("Media Entry For Mix") mediaEntry.setMediaType(KalturaMediaType.VIDEO) # Request 4 mediaEntry = client.media.addFromUploadedFile(mediaEntry, uploadTokenId) # Request 5 client.mixing.appendMediaEntry(mixEntry.id, mediaEntry.id) response = client.doMultiRequest() for subResponse in response: if isinstance(subResponse, KalturaException): print "Error occurred: " + subResponse.message # when accessing the response object we will use an index and not the response number (response number - 1) assert (isinstance(response[1], KalturaMixEntry)) mixEntry = response[1] print "The new mix entry id is: " + mixEntry.id
def AdvancedMultiRequestExample(): client = KalturaClient(GetConfig()) client.startMultiRequest() # Request 1 ks = client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs(ks) # for the current multi request, the result of the first call will be used as the ks for next calls mixEntry = KalturaMixEntry() mixEntry.setName(".Net Mix") mixEntry.setEditorType(KalturaEditorType.SIMPLE) # Request 2 mixEntry = client.mixing.add(mixEntry) # Request 3 uploadTokenId = client.media.upload(file('DemoVideo.flv', 'rb')) mediaEntry = KalturaMediaEntry() mediaEntry.setName("Media Entry For Mix") mediaEntry.setMediaType(KalturaMediaType.VIDEO) # Request 4 mediaEntry = client.media.addFromUploadedFile(mediaEntry, uploadTokenId) # Request 5 client.mixing.appendMediaEntry(mixEntry.id, mediaEntry.id) response = client.doMultiRequest() for subResponse in response: if isinstance(subResponse, KalturaException): print "Error occurred: " + subResponse.message # when accessing the response object we will use an index and not the response number (response number - 1) assert(isinstance(response[1], KalturaMixEntry)) mixEntry = response[1] print "The new mix entry id is: " + mixEntry.id
with open(filename, 'a', newline='') as csvfile: print("printing categories!") write_categories = writer(csvfile, delimiter=',', quotechar=',', quoting=QUOTE_MINIMAL) write_categories.writerow(['id'] + ['player_name'] + ['html5Url']) with open(filename, 'a', newline='') as csvfile: write = writer(csvfile, delimiter=',') write.writerows(write_body) # SESSION CONFIG APPTOKEN config = KalturaConfiguration(apptoken.partner_id) config.serviceUrl = "https://api.kaltura.nordu.net/" client = KalturaClient(config) # GENERATE SESSION widgetId = "_"+str(apptoken.partner_id) expiry = 86400 result = client.session.startWidgetSession(widgetId, expiry) client.setKs(result.ks) ATHash = hashlib.sha256(result.ks.encode('ascii')+apptoken.tokenHash.encode('ascii')).hexdigest() type = KalturaSessionType.ADMIN result = client.appToken.startSession(apptoken.tokenid, ATHash, apptoken.user_id, type, expiry) client.setKs(result.ks) result=get_uiconf("1,8") write_csv_file(result,"players.csv")
def auth(): client = KalturaClient(GetConfig()) ks = client.session.start(SETTINGS['ADMIN_SECRET'], SETTINGS['USER_NAME'], KalturaSessionType.ADMIN, SETTINGS['PARTNER_ID'], 86400, "") client.setKs(ks) return client
def SampleMetadataOperations(): # The metadata field we'll add/update metaDataFieldName = "SubtitleFormat" fieldValue = "VobSub" # The Schema file for the field # Currently, you must build the xsd yourself. There is no utility provided. xsdFile = "MetadataSchema.xsd" client = KalturaClient(GetConfig()) # start new session (client session is enough when we do operations in a users scope) ks = client.generateSession(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs(ks) # Setup a pager and search to use pager = KalturaFilterPager() search = KalturaMediaEntryFilter() search.setOrderBy(KalturaMediaEntryOrderBy.CREATED_AT_ASC) search.setMediaTypeEqual(KalturaMediaType.VIDEO) # Video only pager.setPageSize(10) pager.setPageIndex(1) print "List videos, get the first one..." # Get 10 video entries, but we'll just use the first one returned entries = client.media.list(search, pager).objects # make sure we have a metadata profile profile = KalturaMetadataProfile() profile.setName('TestProfile') profile.setMetadataObjectType(KalturaMetadataObjectType.ENTRY) viewsData = "" newProfile = client.metadata.metadataProfile.add(profile, file(xsdFile, 'rb').read(), viewsData) # Check if there are any custom fields defined in the KMC (Settings -> Custom Data) # for the first item returned by the previous listaction filter = KalturaMetadataProfileFilter() metadata = client.metadata.metadataProfile.list(filter, pager).objects name = entries[0].getName() id = entries[0].getId() if metadata[0].getXsd() != None: print "1. There are custom fields for video: " + name + ", entryid: " + id else: print "1. There are no custom fields for video: " + name + ", entryid: " + id # Add a custom data entry in the KMC (Settings -> Custom Data) profile = KalturaMetadataProfile() profile.setName('TestProfile') profile.setMetadataObjectType(KalturaMetadataObjectType.ENTRY) viewsData = "" metadataResult = client.metadata.metadataProfile.update(newProfile.id, profile, file(xsdFile, 'rb').read(), viewsData) assert(metadataResult.xsd != None) # Add the custom metadata value to the first video filter2 = KalturaMetadataFilter() filter2.setObjectIdEqual(entries[0].id) xmlData = "<metadata><SubtitleFormat>" + fieldValue + "</SubtitleFormat></metadata>" metadata2 = client.metadata.metadata.add(newProfile.id, profile.metadataObjectType, entries[0].id, xmlData) assert(metadata2.xml != None) print "3. Successfully added the custom data field for video: " + name + ", entryid: " + id xmlStr = metadata2.xml print "XML used: " + xmlStr # Now lets change the value (update) of the custom field # Get the metadata for the video filter3 = KalturaMetadataFilter() filter3.setObjectIdEqual(entries[0].id) filter3.setMetadataProfileIdEqual(newProfile.id) metadataList = client.metadata.metadata.list(filter3).objects assert(metadataList[0].xml != None) print "4. Current metadata for video: " + name + ", entryid: " + id xmlquoted = metadataList[0].xml print "XML: " + xmlquoted xml = metadataList[0].xml # Make sure we find the old value in the current metadata pos = xml.find("<" + metaDataFieldName + ">" + fieldValue + "</" + metaDataFieldName + ">") assert(pos >= 0) pattern = re.compile("<" + metaDataFieldName + ">([^<]+)</" + metaDataFieldName + ">") xml = pattern.sub("<" + metaDataFieldName + ">Ogg Writ</" + metaDataFieldName + ">", xml) rc = client.metadata.metadata.update(metadataList[0].id, xml) print "5. Updated metadata for video: " + name + ", entryid: " + id xmlquoted = rc.xml print "XML: " + xmlquoted
for subResponse in response: if isinstance(subResponse, KalturaException): print "Error occurred: " + subResponse.message # when accessing the response object we will use an index and not the response number (response number - 1) assert(isinstance(response[1], KalturaMixEntry)) mixEntry = response[1] print "The new mix entry id is: " + mixEntry.id # create session client = KalturaClient(GetConfig()) ks = client.generateSession(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs(ks) # add media uploadTokenId = client.media.upload(file('DemoVideo.flv', 'rb')) mediaEntry = KalturaMediaEntry() mediaEntry.setName("Media Entry Using Python Client") mediaEntry.setMediaType(KalturaMediaType(KalturaMediaType.VIDEO)) mediaEntry = client.media.addFromUploadedFile(mediaEntry, uploadTokenId) # serve DATA_ENTRY_CONTENT = 'bla bla bla' dataEntry = KalturaDataEntry() dataEntry.setName('test data entry') dataEntry.setDataContent(DATA_ENTRY_CONTENT) addedDataEntry = client.data.add(dataEntry)
class MultiRequestTests(KalturaBaseTest): def setUp(self): """These tests require that client.session.start be used Instead of self.client.generateSession TODO: Document Why """ self.config = GetConfig() self.client = KalturaClient(self.config) self.ks = None def test_MultiRequest(self): """From lines 221- 241 of origional PythonTester.py""" self.client.startMultiRequest() ks = self.client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") self.client.setKs(ks) listResult = self.client.baseEntry.list() multiResult = self.client.doMultiRequest() print(multiResult[1].totalCount) self.client.setKs(multiResult[0]) # error try: mediaEntry = self.client.media.get('invalid entry id') assert (False) except KalturaException as e: assert (e.code == 'ENTRY_ID_NOT_FOUND') # multi request error self.client = KalturaClient(GetConfig()) #start a NEW multirequest (could move to separate unit test?) self.client.startMultiRequest() ks = self.client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") self.client.setKs(ks) mediaEntry = self.client.media.get('invalid entry id') multiResult = self.client.doMultiRequest() self.client.setKs(multiResult[0]) assert (isinstance(multiResult[1], KalturaException)) assert (multiResult[1].code == 'ENTRY_ID_NOT_FOUND') #must be called with existing client multirequest session self._AdvancedMultiRequestExample() # copied from C# tester def _AdvancedMultiRequestExample(self): #this is a separate, local client - not 'self.client' client = KalturaClient( self.config) #matches line 154 in PythonTester.py client.startMultiRequest() from KalturaClient.Plugins.Core import KalturaMixEntry from KalturaClient.Plugins.Core import KalturaEditorType # Request 1 ks = client.session.start(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs( ks ) # for the current multi request, the result of the first call will be used as the ks for next calls mixEntry = KalturaMixEntry() mixEntry.setName(".Net Mix %s" % (testString, )) mixEntry.setEditorType(KalturaEditorType.SIMPLE) # Request 2 mixEntry = client.mixing.add(mixEntry) # Request 3 ulFile = getTestFile('DemoVideo.flv') uploadTokenId = client.media.upload(ulFile) mediaEntry = KalturaMediaEntry() mediaEntry.setName("Media Entry For Mix %s" % (testString, )) mediaEntry.setMediaType(KalturaMediaType.VIDEO) # Request 4 mediaEntry = client.media.addFromUploadedFile(mediaEntry, uploadTokenId) # Request 5 client.mixing.appendMediaEntry(mixEntry.id, mediaEntry.id) response = client.doMultiRequest() for subResponse in response: if isinstance(subResponse, KalturaException): self.fail("Error occurred: " + subResponse.message) # when accessing the response object we will use an index and not the response number (response number - 1) assert (isinstance(response[1], KalturaMixEntry)) mixEntry = response[1] print("The new mix entry id is: " + mixEntry.id)
return StringReader(inputData[:atomPos] + struct.pack('>L', atomHeaderSize + newSize) + inputData[(atomPos + 4):newAtomEndPos] + struct.pack('>L', atomEndPos - newAtomEndPos) + 'padd' + inputData[(newAtomEndPos + 8):]) # download and read the input file if not os.path.exists(TEMP_DOWNLOAD_PATH): retrieveUrl(TEST_FLAVOR_URL, TEMP_DOWNLOAD_PATH) inputData = file(TEMP_DOWNLOAD_PATH, 'rb').read() inputAtoms = parseAtoms(inputData, 0, len(inputData), '') # initialize the api client client = KalturaClient(GetConfig()) ks = client.generateSession(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs(ks) # get source only conversion profile sourceOnlyConvProfileId = None for conversionProfile in client.conversionProfile.list().objects: if conversionProfile.name.lower() == 'source only': sourceOnlyConvProfileId = conversionProfile.id if sourceOnlyConvProfileId == None: print 'Failed to find a source only conversion profile' sys.exit(1) def getTimeScaleOffset(): return getAtomDataPos('moov.trak.mdia.mdhd') + 12 # test definitions
return StringReader(inputData[:atomPos] + struct.pack('>L', atomHeaderSize + newSize) + inputData[(atomPos + 4):newAtomEndPos] + struct.pack('>L', atomEndPos - newAtomEndPos) + 'padd' + inputData[(newAtomEndPos + 8):]) # download and read the input file if not os.path.exists(TEMP_DOWNLOAD_PATH): http_utils.downloadUrl(TEST_FLAVOR_URL, TEMP_DOWNLOAD_PATH) inputData = file(TEMP_DOWNLOAD_PATH, 'rb').read() inputAtoms = parseAtoms(inputData, 0, len(inputData), '') # initialize the api client client = KalturaClient(GetConfig()) ks = client.generateSession(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs(ks) # get source only conversion profile sourceOnlyConvProfileId = None for conversionProfile in client.conversionProfile.list().objects: if conversionProfile.name.lower() == 'source only': sourceOnlyConvProfileId = conversionProfile.id if sourceOnlyConvProfileId == None: print('Failed to find a source only conversion profile') sys.exit(1) def getTimeScaleOffset(): return getAtomDataPos('moov.trak.mdia.mdhd') + 12 # test definitions
def SampleMetadataOperations(): # The metadata field we'll add/update metaDataFieldName = "SubtitleFormat" fieldValue = "VobSub" # The Schema file for the field # Currently, you must build the xsd yourself. There is no utility provided. xsdFile = "MetadataSchema.xsd" client = KalturaClient(GetConfig()) # start new session (client session is enough when we do operations in a users scope) ks = client.generateSession(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs(ks) # Setup a pager and search to use pager = KalturaFilterPager() search = KalturaMediaEntryFilter() search.setOrderBy(KalturaMediaEntryOrderBy.CREATED_AT_ASC) search.setMediaTypeEqual(KalturaMediaType.VIDEO) # Video only pager.setPageSize(10) pager.setPageIndex(1) print "List videos, get the first one..." # Get 10 video entries, but we'll just use the first one returned entries = client.media.list(search, pager).objects # make sure we have a metadata profile profile = KalturaMetadataProfile() profile.setName('TestProfile') profile.setMetadataObjectType(KalturaMetadataObjectType.ENTRY) viewsData = "" newProfile = client.metadata.metadataProfile.add( profile, file(xsdFile, 'rb').read(), viewsData) # Check if there are any custom fields defined in the KMC (Settings -> Custom Data) # for the first item returned by the previous listaction filter = KalturaMetadataProfileFilter() metadata = client.metadata.metadataProfile.list(filter, pager).objects name = entries[0].getName() id = entries[0].getId() if metadata[0].getXsd() != None: print "1. There are custom fields for video: " + name + ", entryid: " + id else: print "1. There are no custom fields for video: " + name + ", entryid: " + id # Add a custom data entry in the KMC (Settings -> Custom Data) profile = KalturaMetadataProfile() profile.setName('TestProfile') profile.setMetadataObjectType(KalturaMetadataObjectType.ENTRY) viewsData = "" metadataResult = client.metadata.metadataProfile.update( newProfile.id, profile, file(xsdFile, 'rb').read(), viewsData) assert (metadataResult.xsd != None) # Add the custom metadata value to the first video filter2 = KalturaMetadataFilter() filter2.setObjectIdEqual(entries[0].id) xmlData = "<metadata><SubtitleFormat>" + fieldValue + "</SubtitleFormat></metadata>" metadata2 = client.metadata.metadata.add(newProfile.id, profile.metadataObjectType, entries[0].id, xmlData) assert (metadata2.xml != None) print "3. Successfully added the custom data field for video: " + name + ", entryid: " + id xmlStr = metadata2.xml print "XML used: " + xmlStr # Now lets change the value (update) of the custom field # Get the metadata for the video filter3 = KalturaMetadataFilter() filter3.setObjectIdEqual(entries[0].id) filter3.setMetadataProfileIdEqual(newProfile.id) metadataList = client.metadata.metadata.list(filter3).objects assert (metadataList[0].xml != None) print "4. Current metadata for video: " + name + ", entryid: " + id xmlquoted = metadataList[0].xml print "XML: " + xmlquoted xml = metadataList[0].xml # Make sure we find the old value in the current metadata pos = xml.find("<" + metaDataFieldName + ">" + fieldValue + "</" + metaDataFieldName + ">") assert (pos >= 0) pattern = re.compile("<" + metaDataFieldName + ">([^<]+)</" + metaDataFieldName + ">") xml = pattern.sub( "<" + metaDataFieldName + ">Ogg Writ</" + metaDataFieldName + ">", xml) rc = client.metadata.metadata.update(metadataList[0].id, xml) print "5. Updated metadata for video: " + name + ", entryid: " + id xmlquoted = rc.xml print "XML: " + xmlquoted
if isinstance(subResponse, KalturaException): print "Error occurred: " + subResponse.message # when accessing the response object we will use an index and not the response number (response number - 1) assert (isinstance(response[1], KalturaMixEntry)) mixEntry = response[1] print "The new mix entry id is: " + mixEntry.id # create session client = KalturaClient(GetConfig()) ks = client.generateSession(ADMIN_SECRET, USER_NAME, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "") client.setKs(ks) # add media uploadTokenId = client.media.upload(file('DemoVideo.flv', 'rb')) mediaEntry = KalturaMediaEntry() mediaEntry.setName("Media Entry Using Python Client") mediaEntry.setMediaType(KalturaMediaType(KalturaMediaType.VIDEO)) mediaEntry = client.media.addFromUploadedFile(mediaEntry, uploadTokenId) # serve DATA_ENTRY_CONTENT = 'bla bla bla' dataEntry = KalturaDataEntry() dataEntry.setName('test data entry') dataEntry.setDataContent(DATA_ENTRY_CONTENT) addedDataEntry = client.data.add(dataEntry)