示例#1
0
 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
示例#2
0
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)
示例#3
0
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
示例#5
0
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)
示例#6
0
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
示例#7
0
文件: kaltura.py 项目: 9ae/djv
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, '')
示例#8
0
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, "")
示例#9
0
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
示例#10
0
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
示例#11
0
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
示例#12
0
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()
示例#13
0
文件: kaltura.py 项目: algobunny/djv
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,
                                  '')
示例#14
0
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)
示例#15
0
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)
示例#16
0
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
示例#17
0
 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
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()
示例#19
0
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, "")
示例#20
0
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()
示例#21
0
    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
示例#22
0
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
示例#23
0
 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
示例#25
0
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
示例#27
0
   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
示例#28
0
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
示例#29
0
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
示例#30
0
    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()
示例#31
0
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(
示例#32
0
def GetClient():
    secrets = get_api_secrets()['kaltura']
    config = KalturaConfiguration(secrets['partner_id'])
    config.serviceUrl = SERVICE_URL
    return KalturaClient(config)
示例#33
0
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)
示例#36
0
    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'
示例#40
0
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
示例#41
0
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")
示例#42
0
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)