First version

This commit is contained in:
2022-04-09 23:24:47 +03:00
parent 2fc2ff1d7f
commit 559f6878f7
18 changed files with 425 additions and 1 deletions
+42
View File
@@ -0,0 +1,42 @@
from typing import List
from .models import GiteaRepository
from urllib.parse import urljoin
from pydantic import parse_obj_as
import requests
class GiteaApi:
def __init__(self, endpoint: str, token: str):
self._endpoint = endpoint
self._token = token
def get_repositories(self, page_size=10) -> List[GiteaRepository]:
"""
For mirroring input user is not important.
"""
session = requests.session()
session.headers.update({"Authorization": "token " + self._token})
all_repos = {} # hack for unique repositories in result
page_id = 1
while True:
r = session.get(
urljoin(
self._endpoint,
f"/api/v1/user/repos",
),
params={"limit": page_size, "page": page_id},
)
if r.status_code != 200:
print(f"Failed request, code {r.status_code}")
return []
repos_data = r.json()
if not repos_data:
break
else:
page_id += 1
cur_repos = parse_obj_as(List[GiteaRepository], repos_data)
for repo in cur_repos:
all_repos[repo.repo_id] = repo
return list(all_repos.values())