52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
"""Gitea API 客户端:获取指定用户/组织的最新仓库。"""
|
|
|
|
import os
|
|
import requests
|
|
|
|
|
|
class GiteaClient:
|
|
"""简单的 Gitea API 客户端。"""
|
|
|
|
def __init__(self, base_url: str, token: str = None):
|
|
# 去掉末尾的斜杠,避免拼接出双斜杠
|
|
self.base_url = base_url.rstrip('/')
|
|
self.token = token or os.environ.get('GITEA_TOKEN')
|
|
|
|
def _headers(self):
|
|
headers = {'Accept': 'application/json'}
|
|
if self.token:
|
|
headers['Authorization'] = f'token {self.token}'
|
|
return headers
|
|
|
|
def get_latest_repos(self, owner: str, limit: int = 10):
|
|
"""获取指定用户或组织的最新仓库。
|
|
|
|
参数:
|
|
owner: 用户名或组织名
|
|
limit: 返回的仓库数量上限
|
|
|
|
返回:
|
|
仓库信息列表(dict),按更新时间倒序排列。
|
|
"""
|
|
url = f'{self.base_url}/api/v1/users/{owner}/repos'
|
|
params = {'sort': 'updated', 'limit': limit}
|
|
|
|
resp = requests.get(url, headers=self._headers(), params=params, timeout=15)
|
|
resp.raise_for_status()
|
|
repos = resp.json()
|
|
|
|
# 按 updated_at 倒序排序,确保拿到真正最新的
|
|
repos.sort(key=lambda r: r.get('updated_at', ''), reverse=True)
|
|
return repos[:limit]
|
|
|
|
def get_org_latest_repos(self, org: str, limit: int = 10):
|
|
"""获取指定组织的最新仓库。"""
|
|
url = f'{self.base_url}/api/v1/orgs/{org}/repos'
|
|
params = {'sort': 'updated', 'limit': limit}
|
|
|
|
resp = requests.get(url, headers=self._headers(), params=params, timeout=15)
|
|
resp.raise_for_status()
|
|
repos = resp.json()
|
|
repos.sort(key=lambda r: r.get('updated_at', ''), reverse=True)
|
|
return repos[:limit]
|