From 6a4f332f6fc1337ba6da4ae19a6f55fc50426d2e Mon Sep 17 00:00:00 2001
From: Georg Krause <mail@georg-krause.net>
Date: Tue, 14 Dec 2021 19:45:30 +0100
Subject: [PATCH] Make contributions skripts handle more than 100 issues/merge
 requests

---
 scripts/get-contributions-stats.py | 42 ++++++++++++++++++------------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/scripts/get-contributions-stats.py b/scripts/get-contributions-stats.py
index 7e24bf36b..6ac65ca76 100644
--- a/scripts/get-contributions-stats.py
+++ b/scripts/get-contributions-stats.py
@@ -10,28 +10,36 @@ WEBLATE_COMPONENT_ID = "funkwhale/front"
 
 def get_issues(next_release):
     url = GITLAB_URL + "/api/v4/issues"
-    # TODO assumes we have less than 100 issues per Milestone
-    response = requests.get(
-        url,
-        params={"per_page": 100, "milestone": next_release, "scope": "all"},
-        headers={"PRIVATE-TOKEN": os.environ["PRIVATE_TOKEN"]},
-    )
-    response.raise_for_status()
+    while url:
+        response = requests.get(
+            url,
+            params={"per_page": 20, "milestone": next_release, "scope": "all"},
+            headers={"PRIVATE-TOKEN": os.environ["PRIVATE_TOKEN"]},
+        )
+        response.raise_for_status()
+        yield from response.json()
 
-    return response.json()
+        if "next" in response.links:
+            url = response.links["next"]["url"]
+        else:
+            url = None
 
 
 def get_merge_requests(next_release):
     url = GITLAB_URL + "/api/v4/merge_requests"
-    # TODO assumes we have less than 100 issues per Milestone
-    response = requests.get(
-        url,
-        params={"per_page": 100, "milestone": next_release, "scope": "all"},
-        headers={"PRIVATE-TOKEN": os.environ["PRIVATE_TOKEN"]},
-    )
-    response.raise_for_status()
-
-    return response.json()
+    while url:
+        response = requests.get(
+            url,
+            params={"per_page": 20, "milestone": next_release, "scope": "all"},
+            headers={"PRIVATE-TOKEN": os.environ["PRIVATE_TOKEN"]},
+        )
+        response.raise_for_status()
+        yield from response.json()
+
+        if "next" in response.links:
+            url = response.links["next"]["url"]
+        else:
+            url = None
 
 
 def get_participants(project_id, issue_iid, object_type="issues"):
-- 
GitLab