feat(collector): add RepoData dataclass and collect_all (fixes #2)
- RepoData dataclass with all repo fields - collect_all enriches each repo with release and milestones - Computes open_issues = open_issues_count - open_pr_counter - 6 unit tests with mocked GiteaClient Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
52
src/gitea_dashboard/collector.py
Normal file
52
src/gitea_dashboard/collector.py
Normal file
@@ -0,0 +1,52 @@
|
||||
"""Collecte et agregation des donnees repos Gitea."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
from gitea_dashboard.client import GiteaClient
|
||||
|
||||
|
||||
@dataclass
|
||||
class RepoData:
|
||||
"""Donnees agregees d'un repo."""
|
||||
|
||||
name: str
|
||||
full_name: str
|
||||
description: str
|
||||
open_issues: int # open_issues_count - open_pr_counter
|
||||
is_fork: bool
|
||||
is_archived: bool
|
||||
is_mirror: bool
|
||||
latest_release: dict | None # {tag_name, published_at} ou None
|
||||
milestones: list[dict] # [{title, open_issues, closed_issues, due_on}]
|
||||
|
||||
|
||||
def collect_all(client: GiteaClient) -> list[RepoData]:
|
||||
"""Collecte les donnees de tous les repos.
|
||||
|
||||
Pour chaque repo : enrichit avec release et milestones.
|
||||
Calcule open_issues = open_issues_count - open_pr_counter.
|
||||
"""
|
||||
repos = client.get_repos()
|
||||
result: list[RepoData] = []
|
||||
|
||||
for repo in repos:
|
||||
owner = repo["owner"]["login"]
|
||||
name = repo["name"]
|
||||
|
||||
result.append(
|
||||
RepoData(
|
||||
name=name,
|
||||
full_name=repo["full_name"],
|
||||
description=repo.get("description", "") or "",
|
||||
open_issues=repo["open_issues_count"] - repo["open_pr_counter"],
|
||||
is_fork=repo["fork"],
|
||||
is_archived=repo["archived"],
|
||||
is_mirror=repo["mirror"],
|
||||
latest_release=client.get_latest_release(owner, name),
|
||||
milestones=client.get_milestones(owner, name),
|
||||
)
|
||||
)
|
||||
|
||||
return result
|
||||
Reference in New Issue
Block a user