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 GetKS(): secrets = get_api_secrets()['kaltura'] config = KalturaConfiguration(secrets['partner_id']) config.serviceUrl = SERVICE_URL client = KalturaClient(config) return client.generateSession(secrets['admin_secret'], secrets['username'], KalturaSessionType.ADMIN, secrets['partner_id'], 86400, "")
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 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)
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 get_ks(): """Start new Kaltura API session and return key""" secrets = get_api_secrets()['kaltura'] config = KalturaConfiguration(secrets['partner_id']) config.serviceUrl = SERVICE_URL #config.setLogger(logger) client = KalturaClient(config) return client.generateSession(secrets['admin_secret'], secrets['username'], KalturaSessionType.ADMIN, secrets['partner_id'], 86400, '')
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 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 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 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 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 get_ks(username, privileges, session_type): kaltura_config = KalturaConfiguration(config.partner_id) kaltura_config.serviceUrl = config.service_url client = KalturaClient(kaltura_config) ks = client.session.start(config.admin_secret, username, session_type, config.partner_id, 86400, privileges) return ks
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 get_new_session_key(settings): if not settings: raise Exception("Settings not set in get_new_session_key") partner_id = settings.get('PARTNER_ID') admin_secret = settings.get('ADMIN_SECRET') user_name = settings.get('USER_NAME') client = KalturaClient(GetConfig(settings)) print("-> get_new_session_key", admin_secret, user_name, partner_id) return client.session.start(admin_secret, user_name, KalturaSessionType.ADMIN, partner_id, KS_EXPIRY, "")
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 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 ks_for_user(username, privileges): kaltura_config = KalturaConfiguration(config.partner_id) kaltura_config.serviceUrl = config.service_url client = KalturaClient(kaltura_config) ks = client.session.start( config.admin_secret, username, KalturaSessionType.USER, config.partner_id, 86400, privileges) return ks
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 _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 startSession(partner_id, user_id, secret): """ Use configuration to generate KS """ global __client__, __params__ __params__['partner_id'] = partner_id __params__['user_id'] = user_id __params__['secret'] = secret if __client__ == None: config = KalturaConfiguration(__params__['partner_id'], logger=KalturaLogger()) config.serviceUrl = __params__['url'] __client__ = KalturaClient(config) # trigger session start getClient() return None
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(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 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
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 # 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()
start_time = time.time() FORMAT = '%(asctime)s %(message)s' logging.basicConfig(filename=r'/home/ec2-user/Yan/web_upload_logs.log', level=logging.INFO, format=FORMAT, filemode='a') log = logging.getLogger() headers = {'Authorization': 'GenieKey 03c0841c-xxxxxxxxxxx'} configuration.api_key['Authorization'] = '03c0841c-xxxxxxxxxxx' configuration.api_key_prefix['Authorization'] = 'GenieKey' client = AlertApi() partnerId = 111111 config = KalturaConfiguration(partnerId) config.serviceUrl = "https://www.kaltura.com/" client = KalturaClient(config) secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" userId = None ktype = KalturaSessionType.ADMIN expiry = 432000 # = 5 days privileges = "disableentitlement" options = Options() options.headless = True driver = webdriver.Firefox(options=options, executable_path='/usr/local/bin/geckodriver') wait = WebDriverWait(driver, 20) def alerttoopsgenie(): body1 = CreateAlertRequest(
def GetClient(): secrets = get_api_secrets()['kaltura'] config = KalturaConfiguration(secrets['partner_id']) config.serviceUrl = SERVICE_URL return KalturaClient(config)
class BackendClient: admin_secret = get_config('admin_secret') partner_id = get_config('partner_id') url = get_config('api_service_url') session_duration = get_config('session_duration') mode = get_config('mode') format = 2 request_timeout = 120 expiration_time_ks = -1 mutex = Lock() config = KalturaConfiguration(url) client = KalturaClient(config) client.setPartnerId(partner_id) ks = None type = KalturaSessionType.ADMIN def __init__(self, session_id): self.logger = logger_decorator(self.__class__.__name__, session_id) self.logger.info( "Init BackendClient: admin_secret %s, partner_id %s, session_duration %s, url %s", self.admin_secret, self.partner_id, self.session_duration, self.url) def create_new_session(self): ks = self.client.generateSessionV2(self.admin_secret, None, self.type, self.partner_id, int(self.session_duration)) #result = self.client.session.start(self.admin_secret, None, self.type, self.partner_id, None, None) BackendClient.ks = ks BackendClient.expiration_time_ks = int(self.session_duration) + int( time.time()) - 3600 # confidence interval self.client.setKs(self.ks) self.logger.info("Creating a new session, KS= %s ", self.ks) def get_kaltura_session(self): self.mutex.acquire() try: if (self.ks is None) or self.expiration_time_ks < int(time.time()): self.create_new_session() finally: self.mutex.release() 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 handle_request(self, partner_id, service, action, *parameters): client = self.impersonate_client(partner_id) service_attribute = getattr(client, service) action_attribute = getattr(service_attribute, action) self.logger.debug("[%s][%s] About to call", service, action) (result, header) = action_attribute(*parameters) self.logger.debug("[%s][%s] API result's header : %s ", service, action, header) return result def cancel_replace(self, partner_id, entry_id): return self.handle_request(partner_id, 'media', 'cancelReplace', entry_id) def get_recorded_entry(self, partner_id, entry_id): return self.handle_request(partner_id, 'media', 'get', entry_id) def get_live_entry(self, entry_id): self.get_kaltura_session( ) # generate KS in case that not existed or expired result = self.client.liveStream.get(entry_id) self.logger.info("Header :%s ", result[1]) return result[0] def upload_token_add(self, partner_id, file_name, file_size): upload_token_obj = KalturaUploadToken() upload_token_obj.fileName = file_name upload_token_obj.fileSize = file_size result = self.handle_request(partner_id, 'uploadToken', 'add', upload_token_obj) self.logger.info("Token id : [%s], file name: [%s], partnerId: [%s]", result.id, file_name, partner_id) return result.id def upload_token_list(self, partner_id, file_name): upload_token_filter = KalturaUploadTokenFilter() upload_token_filter.fileNameEqual = file_name upload_token_filter.statusIn = ''.join([ str(KalturaUploadTokenStatus.PENDING), ',', str(KalturaUploadTokenStatus.PARTIAL_UPLOAD), ',', str(KalturaUploadTokenStatus.FULL_UPLOAD) ]) return self.handle_request(partner_id, 'uploadToken', 'list', upload_token_filter) def upload_token_upload(self, upload_chunk_obj): token = upload_chunk_obj.upload_session.token_id file_name = upload_chunk_obj.upload_session.file_name chunks_to_upload = upload_chunk_obj.upload_session.chunks_to_upload sequence_number = upload_chunk_obj.chunk_index resume = upload_chunk_obj.resume final_chunk = upload_chunk_obj.final_chunk resume_at = upload_chunk_obj.resume_at self.logger.info( "About to upload chunk [%s] from [%s] in file [%s] token:[%s], resume:[%s], " "final_chunk [%s], resume_at: [%s]", sequence_number, chunks_to_upload, file_name, token, resume, final_chunk, resume_at) result = self.handle_request( upload_chunk_obj.upload_session.partner_id, 'uploadToken', 'upload', token, upload_chunk_obj.file_obj, resume, final_chunk, resume_at) self.logger.info("Finish to upload, result: %s", self.upload_token_result_to_json(result)) return result @staticmethod def upload_token_result_to_json( result ): # wrapped by try catch in order to prevent upload token to be failed. result_dictionary = { "fileName": result.fileName, "fileSize": result.fileSize, "token": result.id, "partnerId": result.partnerId, "status": result.status.value, "uploadFileSize": result.uploadedFileSize } return json.dumps(result_dictionary, ensure_ascii=False) def set_recorded_content(self, entry_id, resource, duration, partner_id, recorded_id): self.logger.info( "set_recorded_content entry_id [%s], resource [%s] duration [%s] recorded_id [%s]", entry_id, resource.__class__.__name__, duration, recorded_id) self.handle_request(partner_id, 'liveStream', 'setRecordedContent', entry_id, 0, resource, duration, recorded_id) def set_recorded_content_remote(self, upload_session, duration): token_id = upload_session.token_id recorded_id = upload_session.recorded_id entry_id = upload_session.entry_id partner_id = upload_session.partner_id resource = KalturaUploadedFileTokenResource(token_id) self.logger.info( "set_recorded_content_remote partner_id [%s] token [%s] duration [%s]", partner_id, token_id, duration) self.set_recorded_content(entry_id, resource, duration, partner_id, recorded_id) def set_recorded_content_local(self, partner_id, entry_id, output_file, duration, recorded_id): # todo check it self.logger.info( "set_recorded_content_local partner_id [%s] output_file [%s] duration [%s]", partner_id, output_file, duration) resource = KalturaServerFileResource() resource.localFilePath = output_file self.set_recorded_content(entry_id, resource, duration, partner_id, recorded_id)
newAtomEndPos = atomPos + atomHeaderSize + newSize if newAtomEndPos + 8 > atomEndPos: raise Exception('not enough room to create padding atom') 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():
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)
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 # create session client = KalturaClient(GetConfig()) ks = client.session.start(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()
newAtomEndPos = atomPos + atomHeaderSize + newSize if newAtomEndPos + 8 > atomEndPos: raise Exception('not enough room to create padding atom') 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():
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
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 # 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'
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 write_csv_file(write_body,filename): 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")
from KalturaClient import * from KalturaClient.Plugins.Core import * from KalturaClient.Plugins.Metadata import * config = KalturaConfiguration() config.serviceUrl = "https://www.kaltura.com/" client = KalturaClient(config) ks = client.session.start( "YOUR_KALTURA_SECRET", "YOUR_USER_ID", KalturaSessionType.ADMIN, YOUR_PARTNER_ID) client.setKs(ks) filter = KalturaMetadataProfileFilter() pager = KalturaFilterPager() result = client.metadata.metadataProfile.list(filter, pager) print(result)