async def get_artifacts( client: HarborAsyncClient, project_name: str, repository_name: str, page_number: int, page_size: int, ) -> List[str]: # номер страницы с артефактами в Harbor harbor_page_number = 1 # номер страницы с тегами (RIM) rim_page_number = page_number # используем входной page_number # буфер под все собранные теги all_tags = [] # собираем ВСЕ теги из Harbor while True: # считываем из Harbor артефакты artifacts = await client.get_artifacts( project_name=project_name, repository_name=repository_name, page=harbor_page_number, page_size=10, limit=10, ) print(f"Harbor page number: {harbor_page_number}") # обрабатываем артефакты for artifact in artifacts: # проверяем есть ли тэги if artifact.tags: # перебираем все ссылки на тэги for tag_reference in artifact.tags: # путь до артефакта artifact_name = ( f"{project_name}/{repository_name}:{tag_reference.name}" ) all_tags.append(artifact_name) # если нет артефактов - выходим if not artifacts: break # увеличичиваем номер страницы в harbor harbor_page_number += 1 # применяем пагинацию к собранным тегам start_idx = (rim_page_number - 1) * page_size end_idx = start_idx + page_size # проверяем валидность запрошенной страницы if start_idx >= len(all_tags): return [] # несуществующая страница - пустой результат return all_tags[start_idx:end_idx]