| @@ -0,0 +1,55 @@ | |||
| 1 | + | async 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] | |
aquafire / paginate_tags.py
Last active 6 months ago
aquafire revised this gist 10 months ago · ee05a00
1 file changed, 55 insertions