commit: 71f14262b622bcd41795bbbbf9017e576ad13a94 Author: Thomas Bracht Laumann Jespersen <t <AT> laumann <DOT> xyz> AuthorDate: Sat Mar 7 07:28:07 2026 +0000 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> CommitDate: Sat Mar 7 07:37:42 2026 +0000 URL: https://gitweb.gentoo.org/proj/assign-pull-requests.git/commit/?id=71f14262
Properly support paginated GET endpoints Signed-off-by: Thomas Bracht Laumann Jespersen <t <AT> laumann.xyz> Part-of: https://github.com/gentoo/assign-pull-requests/pull/8 Closes: https://github.com/gentoo/assign-pull-requests/pull/8 Signed-off-by: Michał Górny <mgorny <AT> gentoo.org> assign-pull-requests-codeberg.py | 9 +++------ codebergapi.py | 18 +++++++++--------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/assign-pull-requests-codeberg.py b/assign-pull-requests-codeberg.py index 42cba47..e2890e6 100644 --- a/assign-pull-requests-codeberg.py +++ b/assign-pull-requests-codeberg.py @@ -139,10 +139,9 @@ def scanfiles(filelist, categories): def delete_old_assignment(repo, pr_id, codeberg_username): - comments = repo.get_comments(pr_id) to_remove = [] - for c in comments: + for c in repo.get_comments(pr_id): if c["user"]["login"] == codeberg_username: if "Pull Request assignment" in c["body"]: to_remove.append(c["id"]) @@ -191,7 +190,7 @@ def assign_one( delete_old_assignment(repo, pr_id, codeberg_username) - commits = repo.commits(pr_id) + commits = list(repo.commits(pr_id)) files = repo.files(pr_id) # look through files in the PR to determine the areas affected @@ -456,9 +455,7 @@ def main(repo_path): with CodebergAPI(owner, repo, token) as repo: pulls = repo.pulls() - labels = repo.labels() - - label_mapping = {l["name"]: l["id"] for l in labels} + label_mapping = {l["name"]: l["id"] for l in repo.labels()} for pr in pulls: assign_one( diff --git a/codebergapi.py b/codebergapi.py index 3c591e4..23a2335 100644 --- a/codebergapi.py +++ b/codebergapi.py @@ -63,16 +63,16 @@ class CodebergAPI: f"{self.repos_baseurl}/pulls/{pr_id}", json=({"labels": labels}) ) - def labels(self) -> list[dict]: - return self.session.get(f"{self.repos_baseurl}/labels").json() + def labels(self) -> Generator[None, dict, None]: + return self._get_paginated(f"{self.repos_baseurl}/labels") - def commits(self, pr_id: int) -> list[dict]: + def commits(self, pr_id: int) -> Generator[None, dict, None]: # https://codeberg.org/api/swagger#/repository/repoGetPullRequestCommits - return self.session.get(f"{self.repos_baseurl}/pulls/{pr_id}/commits").json() + return self._get_paginated(f"{self.repos_baseurl}/pulls/{pr_id}/commits", limit=1) - def commit_statuses(self, sha): + def commit_statuses(self, sha) -> Generator[None, dict, None]: # /repos/{owner}/{repo}/statuses/{sha} - return self.session.get(f"{self.repos_baseurl}/statuses/{sha}").json() + return self._get_paginated(f"{self.repos_baseurl}/statuses/{sha}") def commit_set_status( self, sha, state, description=None, target_url=None, context=None @@ -86,10 +86,10 @@ class CodebergAPI: } self.session.post(f"{self.repos_baseurl}/statuses/{sha}", json=body) - def files(self, pr_id: int) -> list[dict]: - return self.session.get(f"{self.repos_baseurl}/pulls/{pr_id}/files").json() + def files(self, pr_id: int) -> Generator[None, dict, None]: + return self._get_paginated(f"{self.repos_baseurl}/pulls/{pr_id}/files") - def get_comments(self, pr_id: int) -> list[dict]: + def get_comments(self, pr_id: int) -> Generator[None, dict, None]: return self._get_paginated(f"{self.repos_baseurl}/issues/{pr_id}/comments") def create_comment(self, pr_id: int, comment: str) -> None:
