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