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:

Reply via email to