def test_list_utf8_search(self):
        """Get a list of videos based on a tag search containing unicode"""
        mediaEntry = KalturaMediaEntry()
        mediaEntry.setName('pytest.MediaTests.test_UTF8_tags')
        mediaEntry.setMediaType(KalturaMediaType(KalturaMediaType.VIDEO))
        ulFile = getTestFile('DemoVideo.flv')
        uploadTokenId = self.client.media.upload(ulFile)
        mediaEntry.setTags(self.test_unicode)
        mediaEntry = self.client.media.addFromUploadedFile(
            mediaEntry, uploadTokenId)
        self.addCleanup(self.client.media.delete, mediaEntry.getId())

        self.readyWait(mediaEntry.getId())

        #find it!
        kfilter = KalturaMediaEntryFilter()
        kfilter.setTagsLike(self.test_unicode)
        result = self.client.media.list(filter=kfilter)

        self.assertEqual(
            1,
            len(result.objects),
            msg="Did not get expected number of objects back from result")

        mediaResult = result.objects[0]
        self.assertEqual(mediaEntry.getId(),
                         mediaResult.getId(),
                         msg="Did not get expected media object from result")
Beispiel #2
0
 def ping(self):
     filter_ = KalturaMediaEntryFilter()
     filter_.nameLike = "Love is the drug I'm thinking of"
     result = self.kaltura_client.baseEntry.list(
         filter=filter_,
         pager=KalturaFilterPager(pageSize=1),
     )
     return result.totalCount is not None
Beispiel #3
0
def getRecent(limit=10, partner_id=None, filt=None):
    """Get the most recently uploaded videos
       provide 'filt' parameter of an existing KalturaMediaEntryFilter to filter results
    """
    if filt is not None:
        kfilter = copy.copy(filt)
    else:
        kfilter = KalturaMediaEntryFilter()
    kfilter.setOrderBy(KalturaMediaEntryOrderBy.CREATED_AT_DESC)
    (client, session) = kconnect(partner_id)
    result = client.media.list(filter=kfilter)
    return result.objects
Beispiel #4
0
def getMostViewed(limit=10, partner_id=None, filt=None):
    """Get videos ranked by views
       provide 'filt' parameter of an existing KalturaMediaEntryFilter to filter results
    """
    if filt is not None:
        kfilter = copy.copy(filt)
    else:
        kfilter = KalturaMediaEntryFilter()
    kfilter.setOrderBy(KalturaMediaEntryOrderBy.VIEWS_DESC)
    (client, session) = kconnect(partner_id)
    result = client.media.list(filter=kfilter)
    return result.objects
Beispiel #5
0
def getTagVids(tags, limit=10, partner_id=None, filt=None):
    """Get all videos that contain one or more querytags
       provide a non-string iterable as tags parameter
       provide 'filt' parameter of an existing KalturaMediaEntryFilter to filter results
    """
    if isinstance(tags, basestring):
        raise TypeError, "tags must be a non-string iterable"
    
    if filt is not None:
        kfilter = copy.copy(filt)
    else:
        kfilter = KalturaMediaEntryFilter()    

    kfilter.setOrderBy(KalturaMediaEntryOrderBy.CREATED_AT_DESC)
    
    try:
        querytags = ','.join(tags)
    except TypeError:
        raise TypeError, "tags must be a non-string iterable"
    
    kfilter.setTagsMultiLikeOr(querytags)
    
    (client, session) = kconnect(partner_id)
    result = client.media.list(filter=kfilter)
    return result.objects    
Beispiel #6
0
def get_total_count(client, type):
    """ get totalcount int """

    pager = KalturaFilterPager()
    pager.pageSize = 1
    if type.lower() == "users":
        filter = KalturaUserFilter()
        result = client.user.list(filter, pager)
        total_count = result.totalCount
    if type.lower() == "media":
        filter = KalturaMediaEntryFilter()
        result = client.media.list(filter, pager)
        total_count = result.totalCount
    return total_count
Beispiel #7
0
    def download_entry_id(self):
        """ Download videofiles from entryId """
        files_to_download = {}
        parent_entry_id, ok = QInputDialog.getText(self, "Input entryid",
                                                   "Input entryid:")
        self.statusbar.showMessage("Download files for parent entryId " +
                                   parent_entry_id)
        self.top_label.setText("Downloading files for parent entryId " +
                               parent_entry_id)

        files_to_download.update({
            parent_entry_id:
            self.kaltura_session.media.get(parent_entry_id).downloadUrl
        })

        filter = KalturaMediaEntryFilter()
        filter.parentEntryIdEqual = parent_entry_id
        pager = KalturaFilterPager()
        child_entries = self.kaltura_session.media.list(filter, pager)

        for child in child_entries.objects:
            files_to_download.update({child.id: child.downloadUrl})

        self.thread_download(parent_entry_id, files_to_download)
 def test_list_utf8_search(self):
     """Get a list of videos based on a tag search containing unicode"""
     mediaEntry = KalturaMediaEntry()
     mediaEntry.setName('pytest.MediaTests.test_UTF8_tags')
     mediaEntry.setMediaType(KalturaMediaType(KalturaMediaType.VIDEO))
     ulFile = getTestFile('DemoVideo.flv')
     uploadTokenId = self.client.media.upload(ulFile)
     mediaEntry.setTags(self.test_unicode)
     mediaEntry = self.client.media.addFromUploadedFile(mediaEntry, uploadTokenId)
     self.addCleanup(self.client.media.delete, mediaEntry.getId())
     
     self.readyWait(mediaEntry.getId())
     
     #find it!
     kfilter = KalturaMediaEntryFilter()
     kfilter.setTagsLike(self.test_unicode)
     result = self.client.media.list(filter=kfilter)
     
     self.assertEqual(1, len(result.objects), 
                      msg="Did not get expected number of objects back from result")
     
     mediaResult = result.objects[0]
     self.assertEqual(mediaEntry.getId(), mediaResult.getId(),
                      msg="Did not get expected media object from result")
Beispiel #9
0
def getCategoryVids(catId, limit=10, partner_id=None, filt=None):
    """ Get videos placed in the provided category id, or child categories
        provide 'filt' parameter of an existing KalturaMediaEntryFilter to filter results
    """
    if filt is not None:
        kfilter = copy.copy(filt)
    else:
        kfilter = KalturaMediaEntryFilter()
    kfilter.setOrderBy(KalturaMediaEntryOrderBy.CREATED_AT_DESC)
    kfilter.setCategoryAncestorIdIn(catId)
    (client, session) = kconnect(partner_id)
    result = client.media.list(filter=kfilter)
    return result.objects
Beispiel #10
0
def makeFilter(catIds=None, tagIds=None, order=None):
    """Helper function for creating KalturaMediaEntryFilters
    """
    kfilter = KalturaMediaEntryFilter()

    if order is not None:
        kfilter.setOrderBy(order)
    
    if catIds is not None:
        if isinstance(catIds, list) or isinstance(catIds, tuple):
            catIds = ','.join(catIds)   
        kfilter.setCategoryAncestorIdIn(catIds)
        
    return kfilter
    def mediaCreation(self) -> DataSourceStatus:
        """
        Update data with Kaltura media metadata from Kaltura API.

        :return: DataSourceStatus
        """

        self._kalturaInit()

        KALTURA_MAX_MATCHES_ERROR: str = 'QUERY_EXCEEDED_MAX_MATCHES_ALLOWED'
        tableName: str = 'mivideo_media_created'

        logger.info('Starting procedure...')

        kClient: KalturaRequestConfiguration = KalturaClient(KalturaConfiguration())
        kClient.setKs(  # pylint: disable=no-member
            KalturaSessionService(kClient).start(
                self.kUserSecret, type=KalturaSessionType.ADMIN, partnerId=self.kPartnerId))
        kMedia = KalturaMediaService(kClient)

        lastTime: datetime = self._readTableLastTime(
            tableName, 'created_at', self.defaultLastTimestamp)

        createdAtTimestamp: float = lastTime.timestamp()

        kFilter = KalturaMediaEntryFilter()
        kFilter.createdAtGreaterThanOrEqual = createdAtTimestamp
        kFilter.categoriesFullNameIn = self.categoriesFullNameIn
        kFilter.orderBy = KalturaMediaEntryOrderBy.CREATED_AT_ASC

        kPager = KalturaFilterPager()
        kPager.pageSize = 500  # 500 is maximum
        kPager.pageIndex = 1

        results: Sequence[KalturaMediaEntry] = None
        lastCreatedAtTimestamp: Union[float, int] = createdAtTimestamp
        lastId: Union[str, None] = None
        numberResults: int = 0
        queryPageNumber: int = kPager.pageIndex  # for logging purposes
        totalNumberResults: int = numberResults  # for logging purposes
        endOfResults = False

        while not endOfResults:
            try:
                results = kMedia.list(kFilter, kPager).objects
            except KalturaException as kException:
                if (KALTURA_MAX_MATCHES_ERROR in kException.args):
                    # set new filter timestamp, reset pager to page 1, then continue
                    kFilter.createdAtGreaterThanOrEqual = lastCreatedAtTimestamp
                    logger.debug(
                        f'New filter timestamp: ({kFilter.createdAtGreaterThanOrEqual})')

                    # to avoid dupes, also filter out the last ID returned by previous query
                    # because Kaltura compares createdAt greater than *or equal* to timestamp
                    kFilter.idNotIn = lastId
                    kPager.pageIndex = 1
                    continue

                logger.info(f'Other Kaltura API error: "{kException}"')
                break

            numberResults = len(results)
            logger.debug(
                f'Query page ({queryPageNumber}); number of results: ({numberResults})')

            if (numberResults > 0):
                resultDictionaries: Sequence[Dict] = tuple(r.__dict__ for r in results)

                creationData: pd.DataFrame = self._makeCreationData(resultDictionaries)

                creationData.to_sql(
                    tableName, self.appDb.engine, if_exists='append', index=False)

                courseData: pd.DataFrame = self._makeCourseData(resultDictionaries)

                courseData.to_sql('mivideo_media_courses', self.appDb.engine, if_exists='append',
                                  index=False, method=self._queryRunner)

                lastCreatedAtTimestamp = results[-1].createdAt
                lastId = results[-1].id
                totalNumberResults += numberResults

            endOfResults = (numberResults < kPager.pageSize)

            kPager.pageIndex += 1
            queryPageNumber += 1

        logger.info(f'Total number of results: ({totalNumberResults})')

        logger.info('Procedure complete.')

        return DataSourceStatus(ValidDataSourceName.KALTURA_API)
    def test_list(self):

        entriesTotalCount = 4
        entriesPageSize = 3
        metadataPageSize = 2

        entries, metadataProfiles = self.createEntriesWithMetadataObjects(entriesTotalCount, metadataPageSize)

        entriesFilter = KalturaMediaEntryFilter()
        entriesFilter.tagsLike = self.uniqueTag
        entriesFilter.statusIn = KalturaEntryStatus.PENDING + ',' + KalturaEntryStatus.NO_CONTENT

        entriesPager = KalturaFilterPager()
        entriesPager.pageSize = entriesPageSize

        metadataFilter = KalturaMetadataFilter()
        metadataFilter.metadataObjectTypeEqual = KalturaMetadataObjectType.ENTRY

        metadataMapping = KalturaResponseProfileMapping()
        metadataMapping.filterProperty = 'objectIdEqual'
        metadataMapping.parentProperty = 'id'

        metadataPager = KalturaFilterPager()
        metadataPager.pageSize = metadataPageSize

        metadataResponseProfile = KalturaDetachedResponseProfile()
        metadataResponseProfile.name = self.uniqid('test_')
        metadataResponseProfile.type = KalturaResponseProfileType.INCLUDE_FIELDS
        metadataResponseProfile.fields = 'id,objectId,createdAt, xml'
        metadataResponseProfile.filter = metadataFilter
        metadataResponseProfile.pager = metadataPager
        metadataResponseProfile.mappings = [metadataMapping]

        responseProfile = KalturaResponseProfile()
        responseProfile.name = self.uniqid('test_')
        responseProfile.systemName = self.uniqid('test_')
        responseProfile.type = KalturaResponseProfileType.INCLUDE_FIELDS
        responseProfile.fields = 'id,name,createdAt'
        responseProfile.relatedProfiles = [metadataResponseProfile]

        responseProfile = self.client.responseProfile.add(responseProfile)

        nestedResponseProfile = KalturaResponseProfileHolder()
        nestedResponseProfile.id = responseProfile.id

        self.client.setResponseProfile(nestedResponseProfile)
        list = self.client.baseEntry.list(entriesFilter, entriesPager)

        self.assertIsInstance(list, KalturaBaseEntryListResponse)
        self.assertEqual(entriesTotalCount, list.totalCount)
        self.assertEqual(entriesPageSize, len(list.objects))
        [self.assertIsInstance(entry, KalturaMediaEntry) for entry in list.objects]
        
        for entry in list.objects:
            self.assertNotEqual(entry.relatedObjects, NotImplemented)
            self.assertTrue(entry.relatedObjects.has_key(metadataResponseProfile.name))
            metadataList = entry.relatedObjects[metadataResponseProfile.name]
            self.assertIsInstance(metadataList, KalturaMetadataListResponse)
            self.assertEqual(len(metadataProfiles), len(metadataList.objects))
            [self.assertIsInstance(metadata, KalturaMetadata) for metadata in metadataList.objects]
            
            for metadata in metadataList.objects:
                self.assertEqual(entry.id, metadata.objectId)
Beispiel #13
0
 def test_SampleMetadataOperations(self):
     
     from KalturaClient.Plugins.Metadata import KalturaMetadataProfile
     from KalturaClient.Plugins.Metadata import KalturaMetadataObjectType
     from KalturaClient.Plugins.Metadata import KalturaMetadataProfileFilter
     from KalturaClient.Plugins.Metadata import KalturaMetadataFilter        
     
     # 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"
 
     # 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 = self.client.media.list(search, pager).objects
 
     # make sure we have a metadata profile
     profile = KalturaMetadataProfile() 
     profile.setName('TestProfile %s' % (testString,))
     MetadataObjectType = KalturaMetadataObjectType.ENTRY
     
     profile.setMetadataObjectType(MetadataObjectType)
     viewsData = ""
 
     xsdFh = getTestFile(xsdFile)
     newProfile = self.client.metadata.metadataProfile.add(profile, xsdFh.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 = self.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 %s' % (testString,))
     profile.setMetadataObjectType(KalturaMetadataObjectType.ENTRY)
     viewsData = ""
 
     metadataResult = self.client.metadata.metadataProfile.update(newProfile.id, profile, xsdFh.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 = self.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 = self.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 = self.client.metadata.metadata.update(metadataList[0].id, xml)
     print "5. Updated metadata for video: " + name + ", entryid: " + id
     xmlquoted = rc.xml
     print "XML: " + xmlquoted
Beispiel #14
0
def export_media(client, total_count):
    """
    export and returns python dictionary
    key = media owners
    value = list of entryId
    """

    filter = KalturaMediaEntryFilter()
    pager = KalturaFilterPager()
    pager.pageSize = 300
    page_count = 1
    media_return_dict = {}
    domain_list = []
    print_overview(total_count)

    # Iterate on KalturaMediaListResponse objects
    while page_count <= ceil(total_count / 300):
        pager.pageIndex = page_count
        result = client.media.list(filter, pager)
        for media_entry in track(result.objects,
                                 description="Exporting page " +
                                 str(page_count)):
            domain = media_entry.userId
            domain = domain.split("@", 1)
            if len(domain) < 2:
                # We disregard KalturaMediaEntry objects owned by userId without domain
                continue
            domain_list.append(domain[1])
            if media_entry.userId not in media_return_dict:
                media_return_dict[media_entry.userId] = [media_entry.id]
            else:
                media_return_dict[media_entry.userId].append(media_entry.id)

            # Look for Kaltura Capture entryId if mediaType = VIDEO
            media_type_check = media_entry.mediaType
            if media_type_check.value not in [2, 5, 201, 202, 203, 204]:
                logging.debug(media_entry.id +
                              ": mediaType is VIDEO. Check if multi_video")
                multi_video_filter = KalturaMediaEntryFilter()
                multi_video_filter.parentEntryIdEqual = media_entry.id
                multi_video_pager = KalturaFilterPager()
                multi_video_search = client.media.list(multi_video_filter,
                                                       multi_video_pager)
                if len(multi_video_search.objects) > 0:
                    for multi_video_entry in multi_video_search.objects:
                        media_return_dict[media_entry.userId].append(
                            multi_video_entry.id)
            else:
                logging.debug(
                    media_entry.id +
                    ": mediaType is not VIDEO. Don't check if multi_video")

        # Output summary to console
        domain_list_tmp = Counter(domain_list)
        console = Console()
        table = Table(show_header=True, header_style="bold magenta")
        table.add_column("Domain", style="dim", width=12)
        table.add_column("count")
        for domain, count in domain_list_tmp.items():
            table.add_row(domain, str(count))
        console.print(table)
        page_count += 1

    return media_return_dict
Beispiel #15
0
 def ping(self):
     filter_ = KalturaMediaEntryFilter()
     filter_.nameLike = 'Love is the drug I\'m thinking of'
     result = self.kaltura_client.media.list(filter_,
                                             KalturaFilterPager(pageSize=1))
     return result.totalCount is not None
Beispiel #16
0
    def test_list(self):

        entriesTotalCount = 4
        entriesPageSize = 3
        metadataPageSize = 2

        entries, metadataProfiles = self.createEntriesWithMetadataObjects(
            entriesTotalCount, metadataPageSize)

        entriesFilter = KalturaMediaEntryFilter()
        entriesFilter.tagsLike = self.uniqueTag
        entriesFilter.statusIn = KalturaEntryStatus.PENDING + ',' + KalturaEntryStatus.NO_CONTENT

        entriesPager = KalturaFilterPager()
        entriesPager.pageSize = entriesPageSize

        metadataFilter = KalturaMetadataFilter()
        metadataFilter.metadataObjectTypeEqual = KalturaMetadataObjectType.ENTRY

        metadataMapping = KalturaResponseProfileMapping()
        metadataMapping.filterProperty = 'objectIdEqual'
        metadataMapping.parentProperty = 'id'

        metadataPager = KalturaFilterPager()
        metadataPager.pageSize = metadataPageSize

        metadataResponseProfile = KalturaDetachedResponseProfile()
        metadataResponseProfile.name = self.uniqid('test_')
        metadataResponseProfile.type = KalturaResponseProfileType.INCLUDE_FIELDS
        metadataResponseProfile.fields = 'id,objectId,createdAt, xml'
        metadataResponseProfile.filter = metadataFilter
        metadataResponseProfile.pager = metadataPager
        metadataResponseProfile.mappings = [metadataMapping]

        responseProfile = KalturaResponseProfile()
        responseProfile.name = self.uniqid('test_')
        responseProfile.systemName = self.uniqid('test_')
        responseProfile.type = KalturaResponseProfileType.INCLUDE_FIELDS
        responseProfile.fields = 'id,name,createdAt'
        responseProfile.relatedProfiles = [metadataResponseProfile]

        responseProfile = self.client.responseProfile.add(responseProfile)

        nestedResponseProfile = KalturaResponseProfileHolder()
        nestedResponseProfile.id = responseProfile.id

        self.client.setResponseProfile(nestedResponseProfile)
        list = self.client.baseEntry.list(entriesFilter, entriesPager)

        self.assertIsInstance(list, KalturaBaseEntryListResponse)
        self.assertEqual(entriesTotalCount, list.totalCount)
        self.assertEqual(entriesPageSize, len(list.objects))
        [
            self.assertIsInstance(entry, KalturaMediaEntry)
            for entry in list.objects
        ]

        for entry in list.objects:
            self.assertNotEqual(entry.relatedObjects, NotImplemented)
            self.assertTrue(
                entry.relatedObjects.has_key(metadataResponseProfile.name))
            metadataList = entry.relatedObjects[metadataResponseProfile.name]
            self.assertIsInstance(metadataList, KalturaMetadataListResponse)
            self.assertEqual(len(metadataProfiles), len(metadataList.objects))
            [
                self.assertIsInstance(metadata, KalturaMetadata)
                for metadata in metadataList.objects
            ]

            for metadata in metadataList.objects:
                self.assertEqual(entry.id, metadata.objectId)
    def test_SampleMetadataOperations(self):

        from KalturaClient.Plugins.Metadata import KalturaMetadataProfile
        from KalturaClient.Plugins.Metadata import KalturaMetadataObjectType
        from KalturaClient.Plugins.Metadata import KalturaMetadataProfileFilter
        from KalturaClient.Plugins.Metadata import KalturaMetadataFilter

        # 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"

        # 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 = self.client.media.list(search, pager).objects

        # make sure we have a metadata profile
        profile = KalturaMetadataProfile()
        profile.setName('TestProfile %s' % (testString, ))
        MetadataObjectType = KalturaMetadataObjectType.ENTRY

        profile.setMetadataObjectType(MetadataObjectType)
        viewsData = ""

        xsdFh = getTestFile(xsdFile)
        newProfile = self.client.metadata.metadataProfile.add(
            profile, xsdFh.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 = self.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 %s' % (testString, ))
        profile.setMetadataObjectType(KalturaMetadataObjectType.ENTRY)
        viewsData = ""

        metadataResult = self.client.metadata.metadataProfile.update(
            newProfile.id, profile, xsdFh.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 = self.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 = self.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 = self.client.metadata.metadata.update(metadataList[0].id, xml)
        print "5. Updated metadata for video: " + name + ", entryid: " + id
        xmlquoted = rc.xml
        print "XML: " + xmlquoted