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