##// END OF EJS Templates
add auth and paged request to gh_api
MinRK -
Show More
@@ -7,6 +7,8 b' except NameError:'
7 pass
7 pass
8
8
9 import os
9 import os
10 import re
11 import sys
10
12
11 import requests
13 import requests
12 import getpass
14 import getpass
@@ -86,21 +88,56 b" def post_gist(content, description='', filename='file', auth=False):"
86 response_data = json.loads(response.text)
88 response_data = json.loads(response.text)
87 return response_data['html_url']
89 return response_data['html_url']
88
90
89 def get_pull_request(project, num):
91 def get_pull_request(project, num, auth=False):
90 """get pull request info by number
92 """get pull request info by number
91 """
93 """
92 url = "https://api.github.com/repos/{project}/pulls/{num}".format(project=project, num=num)
94 url = "https://api.github.com/repos/{project}/pulls/{num}".format(project=project, num=num)
93 response = requests.get(url)
95 if auth:
96 header = make_auth_header()
97 else:
98 header = None
99 response = requests.get(url, headers=header)
94 response.raise_for_status()
100 response.raise_for_status()
95 return json.loads(response.text, object_hook=Obj)
101 return json.loads(response.text, object_hook=Obj)
96
102
97 def get_pulls_list(project):
103 element_pat = re.compile(r'<(.+?)>')
104 rel_pat = re.compile(r'rel=[\'"](\w+)[\'"]')
105
106 def get_paged_request(url, headers=None):
107 """get a full list, handling APIv3's paging"""
108 results = []
109 while True:
110 print("fetching %s" % url, file=sys.stderr)
111 response = requests.get(url, headers=headers)
112 response.raise_for_status()
113 results.extend(response.json())
114 if 'next' in response.links:
115 url = response.links['next']['url']
116 else:
117 break
118 return results
119
120 def get_pulls_list(project, state="closed", auth=False):
98 """get pull request list
121 """get pull request list
99 """
122 """
100 url = "https://api.github.com/repos/{project}/pulls".format(project=project)
123 url = "https://api.github.com/repos/{project}/pulls?state={state}&per_page=100".format(project=project, state=state)
101 response = requests.get(url)
124 if auth:
102 response.raise_for_status()
125 headers = make_auth_header()
103 return json.loads(response.text)
126 else:
127 headers = None
128 pages = get_paged_request(url, headers=headers)
129 return pages
130
131 def get_issues_list(project, state="closed", auth=False):
132 """get pull request list
133 """
134 url = "https://api.github.com/repos/{project}/pulls?state={state}&per_page=100".format(project=project, state=state)
135 if auth:
136 headers = make_auth_header()
137 else:
138 headers = None
139 pages = get_paged_request(url, headers=headers)
140 return pages
104
141
105 # encode_multipart_formdata is from urllib3.filepost
142 # encode_multipart_formdata is from urllib3.filepost
106 # The only change is to iter_fields, to enforce S3's required key ordering
143 # The only change is to iter_fields, to enforce S3's required key ordering
General Comments 0
You need to be logged in to leave comments. Login now