@@ -47,17 +47,36 @@ def git_config_get(option, default=None):
47
47
except subprocess .CalledProcessError :
48
48
return default
49
49
50
- def retrieve_json (req , ghtoken ):
50
+ def get_response (req_url , ghtoken ):
51
+ req = Request (req_url )
52
+ if ghtoken is not None :
53
+ req .add_header ('Authorization' , 'token ' + ghtoken )
54
+ return urlopen (req )
55
+
56
+ def retrieve_json (req_url , ghtoken , use_pagination = False ):
51
57
'''
52
58
Retrieve json from github.
53
59
Return None if an error happens.
54
60
'''
55
61
try :
56
- if ghtoken is not None :
57
- req .add_header ('Authorization' , 'token ' + ghtoken )
58
- result = urlopen (req )
59
62
reader = codecs .getreader ('utf-8' )
60
- obj = json .load (reader (result ))
63
+ if not use_pagination :
64
+ return json .load (reader (get_response (req_url , ghtoken )))
65
+
66
+ obj = []
67
+ page_num = 1
68
+ while True :
69
+ req_url_page = '{}?page={}' .format (req_url , page_num )
70
+ result = get_response (req_url_page , ghtoken )
71
+ obj .extend (json .load (reader (result )))
72
+
73
+ link = result .headers .get ('link' , None )
74
+ if link is not None :
75
+ link_next = [l for l in link .split (',' ) if 'rel="next"' in l ]
76
+ if len (link_next ) > 0 :
77
+ page_num = int (link_next [0 ][link_next [0 ].find ("page=" )+ 5 :link_next [0 ].find (">" )])
78
+ continue
79
+ break
61
80
return obj
62
81
except HTTPError as e :
63
82
error_message = e .read ()
@@ -69,16 +88,16 @@ def retrieve_json(req, ghtoken):
69
88
return None
70
89
71
90
def retrieve_pr_info (repo ,pull ,ghtoken ):
72
- req = Request ( "https://api.github.com/repos/" + repo + "/pulls/" + pull )
73
- return retrieve_json (req ,ghtoken )
91
+ req_url = "https://api.github.com/repos/" + repo + "/pulls/" + pull
92
+ return retrieve_json (req_url ,ghtoken )
74
93
75
94
def retrieve_pr_comments (repo ,pull ,ghtoken ):
76
- req = Request ( "https://api.github.com/repos/" + repo + "/issues/" + pull + "/comments" )
77
- return retrieve_json (req ,ghtoken )
95
+ req_url = "https://api.github.com/repos/" + repo + "/issues/" + pull + "/comments"
96
+ return retrieve_json (req_url ,ghtoken , use_pagination = True )
78
97
79
98
def retrieve_pr_reviews (repo ,pull ,ghtoken ):
80
- req = Request ( "https://api.github.com/repos/" + repo + "/pulls/" + pull + "/reviews" )
81
- return retrieve_json (req ,ghtoken )
99
+ req_url = "https://api.github.com/repos/" + repo + "/pulls/" + pull + "/reviews"
100
+ return retrieve_json (req_url ,ghtoken , use_pagination = True )
82
101
83
102
def ask_prompt (text ):
84
103
print (text ,end = " " ,file = stderr )
0 commit comments