aquafire / paginate_tags.py

Last active 6 months ago

Like 0
paginate_tags.py Raw
1async def get_artifacts(
2 client: HarborAsyncClient,
3 project_name: str,
4 repository_name: str,
5 page_number: int,
6 page_size: int,
7) -> List[str]:
8 # номер страницы с артефактами в Harbor
9 harbor_page_number = 1
10 # номер страницы с тегами (RIM)
11 rim_page_number = page_number # используем входной page_number
12 # буфер под все собранные теги
13 all_tags = []
14
15 # собираем ВСЕ теги из Harbor
16 while True:
17 # считываем из Harbor артефакты
18 artifacts = await client.get_artifacts(
19 project_name=project_name,
20 repository_name=repository_name,
21 page=harbor_page_number,
22 page_size=10,
23 limit=10,
24 )
25
26 print(f"Harbor page number: {harbor_page_number}")
27
28 # обрабатываем артефакты
29 for artifact in artifacts:
30 # проверяем есть ли тэги
31 if artifact.tags:
32 # перебираем все ссылки на тэги
33 for tag_reference in artifact.tags:
34 # путь до артефакта
35 artifact_name = (
36 f"{project_name}/{repository_name}:{tag_reference.name}"
37 )
38 all_tags.append(artifact_name)
39
40 # если нет артефактов - выходим
41 if not artifacts:
42 break
43
44 # увеличичиваем номер страницы в harbor
45 harbor_page_number += 1
46
47 # применяем пагинацию к собранным тегам
48 start_idx = (rim_page_number - 1) * page_size
49 end_idx = start_idx + page_size
50
51 # проверяем валидность запрошенной страницы
52 if start_idx >= len(all_tags):
53 return [] # несуществующая страница - пустой результат
54
55 return all_tags[start_idx:end_idx]