Skip to content

Commit 88eeba2

Browse files
authored
Merge pull request openSUSE#1977 from openSUSE/bug/pull_limit-1
Use pagination instead of limit -1 when working with Gitea API
2 parents ca8eb5f + ece036a commit 88eeba2

File tree

6 files changed

+36
-87
lines changed

6 files changed

+36
-87
lines changed

osc/gitea_api/branch.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
from typing import List
22
from typing import Optional
33

4+
from .common import GiteaModel
45
from .connection import Connection
56
from .connection import GiteaHTTPResponse
67
from .exceptions import BranchExists
78

89

9-
class Branch:
10-
def __init__(self, data: dict, *, response: Optional[GiteaHTTPResponse] = None):
11-
self._data = data
12-
self._response = response
13-
10+
class Branch(GiteaModel):
1411
@property
1512
def commit(self) -> str:
1613
return self._data["commit"]["id"]
@@ -55,13 +52,13 @@ def list(
5552
:param repo: Name of the repo.
5653
"""
5754
q = {
58-
"limit": -1,
55+
"limit": 50,
5956
}
6057
url = conn.makeurl("repos", owner, repo, "branches", query=q)
6158
# XXX: returns 'null' when there are no branches; an empty list would be a better API
62-
response = conn.request("GET", url)
63-
obj_list = [cls(i, response=response) for i in response.json() or []]
64-
return obj_list
59+
obj_list = []
60+
for response in conn.request_all_pages("GET", url):
61+
obj_list.extend([cls(i, response=response, conn=conn) for i in response.json() or []])
6562

6663
@classmethod
6764
def create(

osc/gitea_api/fork.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
from typing import List
22
from typing import Optional
33

4+
from .common import GiteaModel
45
from .connection import Connection
56
from .exceptions import ForkExists
67
from .repo import Repo
78

89

9-
class Fork:
10+
class Fork(GiteaModel):
1011
@classmethod
1112
def list(
1213
cls,
@@ -22,11 +23,12 @@ def list(
2223
:param repo: Name of the repo.
2324
"""
2425
q = {
25-
"limit": -1,
26+
"limit": 50,
2627
}
2728
url = conn.makeurl("repos", owner, repo, "forks", query=q)
28-
response = conn.request("GET", url)
29-
obj_list = [Repo(i, response=response) for i in response.json()]
29+
obj_list = []
30+
for response in conn.request_all_pages("GET", url):
31+
obj_list.extend([Repo(i, response=response, conn=conn) for i in response.json()])
3032
return obj_list
3133

3234
@classmethod

osc/gitea_api/issue_timeline_entry.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,10 @@ def list(
265265
:param number: Number of the pull request in owner/repo.
266266
"""
267267
q = {
268-
"limit": -1,
268+
"limit": 50,
269269
}
270270
url = conn.makeurl("repos", owner, repo, "issues", str(number), "timeline", query=q)
271-
response = conn.request("GET", url)
272-
obj_list = [cls(i, response=response, conn=conn, check_data=False) for i in response.json() or []]
271+
obj_list = []
272+
for response in conn.request_all_pages("GET", url):
273+
obj_list.extend([cls(i, response=response, conn=conn) for i in response.json() or []])
273274
return obj_list

osc/gitea_api/pr.py

Lines changed: 10 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import functools
22
import re
3+
import typing
34
from typing import Dict
45
from typing import List
56
from typing import Optional
@@ -10,63 +11,8 @@
1011
from .connection import GiteaHTTPResponse
1112
from .user import User
1213

13-
14-
class PullRequestReview(GiteaModel):
15-
@property
16-
def state(self) -> str:
17-
return self._data["state"]
18-
19-
@property
20-
def user(self) -> Optional[str]:
21-
if not self._data["user"]:
22-
return None
23-
return self._data["user"]["login"]
24-
25-
@property
26-
def team(self) -> Optional[str]:
27-
if not self._data["team"]:
28-
return None
29-
return self._data["team"]["name"]
30-
31-
@property
32-
def who(self) -> str:
33-
return self.user if self.user else f"@{self.team}"
34-
35-
@property
36-
def submitted_at(self) -> str:
37-
return self._data["submitted_at"]
38-
39-
@property
40-
def updated_at(self) -> str:
41-
return self._data["updated_at"]
42-
43-
@property
44-
def body(self) -> str:
45-
return self._data["body"]
46-
47-
@classmethod
48-
def list(
49-
cls,
50-
conn: Connection,
51-
owner: str,
52-
repo: str,
53-
number: int,
54-
) -> List["PullRequestReview"]:
55-
"""
56-
List reviews associated with a pull request.
57-
58-
:param conn: Gitea ``Connection`` instance.
59-
:param owner: Owner of the repo.
60-
:param repo: Name of the repo.
61-
:param number: Number of the pull request in owner/repo.
62-
"""
63-
q = {
64-
"limit": -1,
65-
}
66-
url = conn.makeurl("repos", owner, repo, "pulls", str(number), "reviews", query=q)
67-
response = conn.request("GET", url)
68-
obj_list = [cls(i, response=response) for i in response.json()]
69-
return obj_list
14+
if typing.TYPE_CHECKING:
15+
from .pr_review import PullRequestReview
7016

7117

7218
@functools.total_ordering
@@ -448,11 +394,12 @@ def list(
448394

449395
q = {
450396
"state": state,
451-
"limit": -1,
397+
"limit": 50,
452398
}
453399
url = conn.makeurl("repos", owner, repo, "pulls", query=q)
454-
response = conn.request("GET", url)
455-
obj_list = [cls(i, response=response, conn=conn) for i in response.json()]
400+
obj_list = []
401+
for response in conn.request_all_pages("GET", url):
402+
obj_list.extend([cls(i, response=response, conn=conn) for i in response.json()])
456403
return obj_list
457404

458405
@classmethod
@@ -544,7 +491,9 @@ def add_comment(
544491
def get_reviews(
545492
self,
546493
conn: Connection,
547-
) -> List[PullRequestReview]:
494+
) -> List["PullRequestReview"]:
495+
from .pr_review import PullRequestReview
496+
548497
return PullRequestReview.list(conn, self.base_owner, self.base_repo, self.number)
549498

550499
@classmethod

osc/gitea_api/pr_review.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,10 @@ def list(
127127
:param number: Number of the pull request in owner/repo.
128128
"""
129129
q = {
130-
"limit": -1,
130+
"limit": 50,
131131
}
132132
url = conn.makeurl("repos", owner, repo, "pulls", str(number), "reviews", query=q)
133-
response = conn.request("GET", url)
134-
obj_list = [cls(i, response=response, conn=conn) for i in response.json()]
133+
obj_list = []
134+
for response in conn.request_all_pages("GET", url):
135+
obj_list.extend([cls(i, response=response, conn=conn) for i in response.json()])
135136
return obj_list

osc/gitea_api/ssh_key.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
from typing import List
22
from typing import Optional
33

4+
from .common import GiteaModel
45
from .connection import Connection
56
from .connection import GiteaHTTPResponse
67

78

8-
class SSHKey:
9-
def __init__(self, data: dict, *, response: Optional[GiteaHTTPResponse] = None):
10-
self._data = data
11-
self._response = response
12-
9+
class SSHKey(GiteaModel):
1310
@property
1411
def id(self) -> int:
1512
return self._data["id"]
@@ -43,11 +40,13 @@ def list(cls, conn: Connection) -> List["SSHKey"]:
4340
:param conn: Gitea ``Connection`` instance.
4441
"""
4542
q = {
46-
"limit": -1,
43+
"limit": 50,
4744
}
4845
url = conn.makeurl("user", "keys", query=q)
4946
response = conn.request("GET", url)
50-
obj_list = [cls(i, response=response) for i in response.json()]
47+
obj_list = []
48+
for response in conn.request_all_pages("GET", url):
49+
obj_list.extend([cls(i, response=response, conn=conn) for i in response.json() or []])
5150
return obj_list
5251

5352
@classmethod

0 commit comments

Comments
 (0)