Skip to content

Commit acd4476

Browse files
committed
Support per_page search parameter
Update the following search_* APIs to forward the `per_page` parameter. - search_code - search_commits - search_issues - search_repositories - search_users Test plan: updated unit tests to verify per_page parameter. Tested manually by query `search_issues(..., per_page=1)` and verified the results arrived one at a time in each http response. Closes sigmavirus24#1166
1 parent 99398b4 commit acd4476

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

AUTHORS.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,3 +222,5 @@ Contributors
222222
- Andrew MacCormack (@amaccormack-lumira)
223223

224224
- Chris R (@offbyone)
225+
226+
- Chris Cotter (@ccotter)

src/github3/github.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2248,6 +2248,9 @@ def search_code(
22482248
if sort and order in ("asc", "desc"):
22492249
params["order"] = order
22502250

2251+
if per_page is not None:
2252+
params["per_page"] = per_page
2253+
22512254
if text_match:
22522255
headers = {
22532256
"Accept": "application/vnd.github.v3.full.text-match+json"
@@ -2335,6 +2338,9 @@ def search_commits(
23352338
if sort and order in ("asc", "desc"):
23362339
params["order"] = order
23372340

2341+
if per_page is not None:
2342+
params["per_page"] = per_page
2343+
23382344
if text_match:
23392345
headers["Accept"] = ", ".join(
23402346
[
@@ -2427,6 +2433,9 @@ def search_issues(
24272433
if order in ("asc", "desc"):
24282434
params["order"] = order
24292435

2436+
if per_page is not None:
2437+
params["per_page"] = per_page
2438+
24302439
if text_match:
24312440
headers = {
24322441
"Accept": "application/vnd.github.v3.full.text-match+json"
@@ -2505,6 +2514,9 @@ def search_repositories(
25052514
if order in ("asc", "desc"):
25062515
params["order"] = order
25072516

2517+
if per_page is not None:
2518+
params["per_page"] = per_page
2519+
25082520
if text_match:
25092521
headers = {
25102522
"Accept": "application/vnd.github.v3.full.text-match+json"
@@ -2588,6 +2600,9 @@ def search_users(
25882600
if order in ("asc", "desc"):
25892601
params["order"] = order
25902602

2603+
if per_page is not None:
2604+
params["per_page"] = per_page
2605+
25912606
if text_match:
25922607
headers = {
25932608
"Accept": "application/vnd.github.v3.full.text-match+json"

tests/unit/test_github.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,21 +1317,32 @@ class TestGitHubSearchIterators(helper.UnitSearchIteratorHelper):
13171317
def test_search_code(self):
13181318
"""Verify the request to search for code."""
13191319
i = self.instance.search_code(
1320-
"addClass in:file language:js repo:jquery/jquery"
1320+
"addClass in:file language:js repo:jquery/jquery", per_page=15
13211321
)
13221322
self.get_next(i)
13231323

13241324
self.session.get.assert_called_once_with(
13251325
url_for("search/code"),
13261326
params={
1327-
"per_page": 100,
1327+
"per_page": 15,
13281328
"q": "addClass in:file language:js repo:jquery/jquery",
13291329
},
13301330
headers={},
13311331
)
13321332

13331333
def test_search_commits(self):
13341334
"""Verify the request to search for commits."""
1335+
i = self.instance.search_commits("css repo:octocat/Spoon-Knife", per_page=15)
1336+
self.get_next(i)
1337+
1338+
self.session.get.assert_called_once_with(
1339+
url_for("search/commits"),
1340+
params={"per_page": 15, "q": "css repo:octocat/Spoon-Knife"},
1341+
headers={"Accept": "application/vnd.github.cloak-preview"},
1342+
)
1343+
1344+
def test_search_commits_default_per_page(self):
1345+
"""Verify the default per_page in the commits search."""
13351346
i = self.instance.search_commits("css repo:octocat/Spoon-Knife")
13361347
self.get_next(i)
13371348

@@ -1347,14 +1358,15 @@ def test_search_issues(self):
13471358
"windows label:bug language:python state:open",
13481359
sort="created",
13491360
order="asc",
1361+
per_page=15,
13501362
)
13511363
self.get_next(i)
13521364

13531365
self.session.get.assert_called_once_with(
13541366
url_for("search/issues"),
13551367
params={
13561368
"order": "asc",
1357-
"per_page": 100,
1369+
"per_page": 15,
13581370
"q": "windows label:bug language:python state:open",
13591371
"sort": "created",
13601372
},
@@ -1364,15 +1376,15 @@ def test_search_issues(self):
13641376
def test_search_repositories(self):
13651377
"""Verify the request to search for repositories."""
13661378
i = self.instance.search_repositories(
1367-
"tetris language:assembly", sort="stars", order="asc"
1379+
"tetris language:assembly", sort="stars", order="asc", per_page=15
13681380
)
13691381
self.get_next(i)
13701382

13711383
self.session.get.assert_called_once_with(
13721384
url_for("search/repositories"),
13731385
params={
13741386
"order": "asc",
1375-
"per_page": 100,
1387+
"per_page": 15,
13761388
"q": "tetris language:assembly",
13771389
"sort": "stars",
13781390
},
@@ -1381,12 +1393,12 @@ def test_search_repositories(self):
13811393

13821394
def test_search_users(self):
13831395
"""Verify the request to search for users."""
1384-
i = self.instance.search_users("tom repos:>42 followers:>1000")
1396+
i = self.instance.search_users("tom repos:>42 followers:>1000", per_page=15)
13851397
self.get_next(i)
13861398

13871399
self.session.get.assert_called_once_with(
13881400
url_for("search/users"),
1389-
params={"per_page": 100, "q": "tom repos:>42 followers:>1000"},
1401+
params={"per_page": 15, "q": "tom repos:>42 followers:>1000"},
13901402
headers={},
13911403
)
13921404

0 commit comments

Comments
 (0)