def list_app_tokens(args): """ list appTokens """ client = kaltura_session() if args.apptoken: filter = KalturaAppTokenFilter() if args.created_at: createdAtFilter = datetime( args.created_at[0], args.created_at[1], args.created_at[2], 0, 0 ).timestamp() filter.createdAtGreaterThanOrEqual = createdAtFilter result = client.appToken.list(filter) count = result.totalCount print("totalcount returned: " + str(count) + "\n") nid = 0 while nid < count: for i in result.objects: print("id: " + i.id) print("token: " + i.token) print(i.description) print( "created at: " + datetime.fromtimestamp(i.createdAt).strftime("%c") + "\n" ) nid = nid + 1 elif args.kmcroles: filter = KalturaUserRoleFilter() pager = KalturaFilterPager() pager.pageIndex = 1 pager.pageSize = 500 listroles = client.userRole.list(filter, pager) for i in listroles.objects: print(i.name + " " + str(i.id))
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 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 get_category_object(self, name): response = self.client.category.list( filter=KalturaCategoryFilter(fullNameEqual=name), pager=KalturaFilterPager(pageIndex=1, pageSize=1), ) category_objects = [ _category_object_to_json(o) for o in response.objects ] return category_objects[0] if category_objects else None
def get_canvas_category_object(self, canvas_course_site_id): response = self.kaltura_client.category.list( filter=KalturaCategoryFilter( fullNameEqual=f'Canvas>site>channels>{canvas_course_site_id}'), pager=KalturaFilterPager(pageIndex=1, pageSize=1), ) canvas_category_objects = [ _category_object_to_json(o) for o in response.objects ] return canvas_category_objects[0] if canvas_category_objects else None
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_users(client, total_count): """ export users and returns python dictionary kmc users are stored as a dictionary in kmc key kms users are stored as a dictionary in kms key """ filter = KalturaUserFilter() pager = KalturaFilterPager() pager.pageSize = 300 page_count = 1 user_return_dict = {"kmc": {}, "kms": {}} domain_list = [] user_type_count_kms = 0 user_type_count_kmc = 0 print_overview(total_count) # Iterate on KalturaUserListResponse objects while page_count <= ceil(total_count / 300): pager.pageIndex = page_count result = client.user.list(filter, pager) for user_entry in track(result.objects, description="Exporting page " + str(page_count)): domain = user_entry.id domain = domain.split("@", 1) if len(domain) < 2: # We disregard KalturaUser objects without domain in userId continue domain_list.append(domain[1]) if user_entry.isAdmin is True: user_type = "kmc" user_type_count_kmc += 1 else: user_type = "kms" user_type_count_kms += 1 user_return_dict[user_type][user_entry.id] = [user_entry.email] # 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) console = Console() table = Table(show_header=True, header_style="bold magenta") table.add_column("Users", style="dim", width=12) table.add_column("Count") table.add_row("Total", str(user_type_count_kms + user_type_count_kmc)) table.add_row("KMS", str(user_type_count_kms)) table.add_row("KMC", str(user_type_count_kmc)) console.print(table) page_count += 1 return user_return_dict
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 _fetch(page_index): return self.kaltura_client.categoryEntry.list( filter=kaltura_category_entry_filter, pager=KalturaFilterPager(pageIndex=page_index, pageSize=DEFAULT_KALTURA_PAGE_SIZE), )
def _fetch(page_index): return self.kaltura_client.schedule.scheduleEvent.list( filter=kaltura_event_filter, pager=KalturaFilterPager(pageIndex=page_index, pageSize=DEFAULT_KALTURA_PAGE_SIZE), )
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 _fetch(page_index): return self.kaltura_client.schedule.scheduleResource.list( filter=KalturaScheduleResourceFilter(), pager=KalturaFilterPager(pageIndex=page_index, pageSize=DEFAULT_KALTURA_PAGE_SIZE), )
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 get_resource_list(self): response = self.kaltura_client.schedule.scheduleResource.list( KalturaScheduleResourceFilter(), KalturaFilterPager(), ) return [{'id': o.id, 'name': o.name} for o in response.objects]
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 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)