Skip to content

Commit 87af5a1

Browse files
authored
Merge pull request #873 from jacquerie/add-review-requests
Add support for review requests
2 parents 6824ebc + f07a252 commit 87af5a1

File tree

6 files changed

+162
-0
lines changed

6 files changed

+162
-0
lines changed

src/github3/pulls.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ class _PullRequest(models.GitHubCore):
194194
class_name = '_PullRequest'
195195

196196
def _update_attributes(self, pull):
197+
from . import orgs
197198
self._api = pull['url']
198199
self.assignee = pull['assignee']
199200
if self.assignee is not None:
@@ -217,6 +218,12 @@ def _update_attributes(self, pull):
217218
self.merged_at = self._strptime(pull['merged_at'])
218219
self.number = pull['number']
219220
self.patch_url = pull['patch_url']
221+
requested_reviewers = pull.get('requested_reviewers', [])
222+
self.requested_reviewers = [
223+
users.ShortUser(r, self) for r in requested_reviewers]
224+
requested_teams = pull.get('requested_teams', [])
225+
self.requested_teams = [
226+
orgs.ShortTeam(t, self) for t in requested_teams]
220227
self.review_comment_urlt = URITemplate(pull['review_comment_url'])
221228
self.review_comments_url = pull['review_comments_url']
222229
self.repository = None
@@ -286,6 +293,29 @@ def create_review_comment(self, body, commit_id, path, position):
286293
json = self._json(self._post(url, data=data), 201)
287294
return self._instance_or_null(ReviewComment, json)
288295

296+
@requires_auth
297+
def create_review_requests(self, reviewers=None, team_reviewers=None):
298+
"""Ask for reviews on this pull request.
299+
300+
:param list reviewers:
301+
The users to which request a review
302+
:param list team_reviewers:
303+
The teams to which request a review
304+
:returns:
305+
The pull request on which the reviews were requested
306+
:rtype:
307+
:class:`~github3.pulls.ShortPullRequest`
308+
"""
309+
url = self._build_url('requested_reviewers', base_url=self._api)
310+
data = {}
311+
if reviewers is not None:
312+
data['reviewers'] = [getattr(r, 'login', r) for r in reviewers]
313+
if team_reviewers is not None:
314+
data['team_reviewers'] = [
315+
getattr(t, 'slug', t) for t in team_reviewers]
316+
json = self._json(self._post(url, data=data), 201)
317+
return self._instance_or_null(ShortPullRequest, json)
318+
289319
@requires_auth
290320
def create_review(self, body, commit_id=None, event=None, comments=None):
291321
"""Create a review comment on this pull request.
@@ -334,6 +364,28 @@ def create_review(self, body, commit_id=None, event=None, comments=None):
334364
json = self._json(self._post(url, data=data), 200)
335365
return self._instance_or_null(PullReview, json)
336366

367+
@requires_auth
368+
def delete_review_requests(self, reviewers=None, team_reviewers=None):
369+
"""Cancel review requests on this pull request.
370+
371+
:param list reviewers:
372+
The users whose review is no longer requested
373+
:param list team_reviewers:
374+
The teams whose review is no longer requested
375+
:returns:
376+
True if successful, False otherwise
377+
:rtype:
378+
bool
379+
"""
380+
url = self._build_url('requested_reviewers', base_url=self._api)
381+
data = {}
382+
if reviewers is not None:
383+
data['reviewers'] = [getattr(r, 'login', r) for r in reviewers]
384+
if team_reviewers is not None:
385+
data['team_reviewers'] = [
386+
getattr(t, 'slug', t) for t in team_reviewers]
387+
return self._boolean(self._delete(url, data=dumps(data)), 200, 404)
388+
337389
def diff(self):
338390
"""Return the diff.
339391
@@ -495,6 +547,18 @@ def review_comments(self, number=-1, etag=None):
495547
url = self._build_url('comments', base_url=self._api)
496548
return self._iter(int(number), url, ReviewComment, etag=etag)
497549

550+
def review_requests(self):
551+
"""Retrieve the review requests associated with this pull request.
552+
553+
:returns:
554+
review requests associated with this pull request
555+
:rtype:
556+
:class:`~github3.pulls.ReviewRequests`
557+
"""
558+
url = self._build_url('requested_reviewers', base_url=self._api)
559+
json = self._json(self._get(url), 200)
560+
return self._instance_or_null(ReviewRequests, json)
561+
498562
def reviews(self, number=-1, etag=None):
499563
"""Iterate over the reviews associated with this pull request.
500564
@@ -748,6 +812,16 @@ class ShortPullRequest(_PullRequest):
748812
A :class:`~github3.repos.repo.ShortRepository` from the :attr:`base`
749813
instance.
750814
815+
.. attribute:: requested_reviewers
816+
817+
A list of :class:`~github3.users.ShortUser` from which a review was
818+
requested.
819+
820+
.. attribute:: requested_teams
821+
822+
A list of :class:`~github3.orgs.ShortTeam` from which a review was
823+
requested.
824+
751825
.. attribute:: review_comment_urlt
752826
753827
A URITemplate instance that expands to provide the review comment URL
@@ -1037,3 +1111,29 @@ def reply(self, body):
10371111
'body': body, 'in_reply_to': in_reply_to
10381112
}), 201)
10391113
return self._instance_or_null(ReviewComment, json)
1114+
1115+
1116+
class ReviewRequests(models.GitHubCore):
1117+
"""Object representing review requests in the GitHub API.
1118+
1119+
.. attribute:: teams
1120+
1121+
The list of teams that were requested a review
1122+
1123+
.. attribute:: users
1124+
1125+
The list of users that were requested a review
1126+
1127+
Please see GitHub's `Review Request Documentation`_ for more information.
1128+
1129+
.. _Review Request Documentation:
1130+
https://developer.github.com/v3/pulls/review_requests/
1131+
"""
1132+
def _update_attributes(self, requests):
1133+
from . import orgs
1134+
self.teams = [orgs.ShortTeam(t, self) for t in requests['teams']]
1135+
self.users = [users.ShortUser(u, self) for u in requests['users']]
1136+
1137+
def _repr(self):
1138+
return '<Review Requests [users: {0}, teams: {1}]>'.format(
1139+
len(self.users), len(self.teams))

tests/cassettes/PullRequest_create_review_requests.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": ["gzip, deflate"], "Accept": ["application/vnd.github.v3.full+json"], "User-Agent": ["github3.py/1.1.0"], "Accept-Charset": ["utf-8"], "Connection": ["keep-alive"], "Content-Type": ["application/json"], "Authorization": ["token <AUTH_TOKEN>"]}, "method": "GET", "uri": "https://api.github.com/repos/sigmavirus24/github3.py/pulls/873"}, "response": {"body": {"string": "", "base64_string": "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", "encoding": "utf-8"}, "headers": {"X-XSS-Protection": ["1; mode=block"], "Content-Security-Policy": ["default-src 'none'"], "Access-Control-Expose-Headers": ["ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval"], "Transfer-Encoding": ["chunked"], "Last-Modified": ["Tue, 31 Jul 2018 12:37:29 GMT"], "Access-Control-Allow-Origin": ["*"], "X-Frame-Options": ["deny"], "Status": ["200 OK"], "X-GitHub-Request-Id": ["9746:3FAC:7DC188:102C2C9:5B605840"], "ETag": ["W/\"cc4210ad9f1cd12d4300e31b40a12398\""], "Date": ["Tue, 31 Jul 2018 12:38:25 GMT"], "X-RateLimit-Remaining": ["4995"], "Strict-Transport-Security": ["max-age=31536000; includeSubdomains; preload"], "Server": ["GitHub.com"], "X-OAuth-Scopes": ["public_repo, read:user"], "X-GitHub-Media-Type": ["github.v3; param=full; format=json"], "X-Content-Type-Options": ["nosniff"], "Content-Encoding": ["gzip"], "X-Runtime-rack": ["0.225128"], "Vary": ["Accept, Authorization, Cookie, X-GitHub-OTP"], "X-RateLimit-Limit": ["5000"], "Cache-Control": ["private, max-age=60, s-maxage=60"], "Referrer-Policy": ["origin-when-cross-origin, strict-origin-when-cross-origin"], "Content-Type": ["application/json; charset=utf-8"], "X-Accepted-OAuth-Scopes": [""], "X-RateLimit-Reset": ["1533044057"]}, "status": {"message": "OK", "code": 200}, "url": "https://api.github.com/repos/sigmavirus24/github3.py/pulls/873"}, "recorded_at": "2018-07-31T12:38:25"}, {"request": {"body": {"string": "{\"reviewers\": [\"sigmavirus24\"]}", "encoding": "utf-8"}, "headers": {"Content-Length": ["31"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["application/vnd.github.v3.full+json"], "User-Agent": ["github3.py/1.1.0"], "Accept-Charset": ["utf-8"], "Connection": ["keep-alive"], "Content-Type": ["application/json"], "Authorization": ["token <AUTH_TOKEN>"]}, "method": "DELETE", "uri": "https://api.github.com/repos/sigmavirus24/github3.py/pulls/873/requested_reviewers"}, "response": {"body": {"string": "", "base64_string": "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", "encoding": "utf-8"}, "headers": {"X-XSS-Protection": ["1; mode=block"], "Content-Security-Policy": ["default-src 'none'"], "Access-Control-Expose-Headers": ["ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval"], "Transfer-Encoding": ["chunked"], "Access-Control-Allow-Origin": ["*"], "X-Frame-Options": ["deny"], "Status": ["200 OK"], "X-GitHub-Request-Id": ["9746:3FAC:7DC1C0:102C315:5B605841"], "ETag": ["W/\"0962ba2945f8ad21491ca6d3038d3bd3\""], "Date": ["Tue, 31 Jul 2018 12:38:25 GMT"], "X-RateLimit-Remaining": ["4994"], "Strict-Transport-Security": ["max-age=31536000; includeSubdomains; preload"], "Server": ["GitHub.com"], "X-OAuth-Scopes": ["public_repo, read:user"], "X-GitHub-Media-Type": ["github.v3; param=full; format=json"], "X-Content-Type-Options": ["nosniff"], "Content-Encoding": ["gzip"], "X-Runtime-rack": ["0.286925"], "Vary": ["Accept, Authorization, Cookie, X-GitHub-OTP"], "X-RateLimit-Limit": ["5000"], "Cache-Control": ["private, max-age=60, s-maxage=60"], "Referrer-Policy": ["origin-when-cross-origin, strict-origin-when-cross-origin"], "Content-Type": ["application/json; charset=utf-8"], "X-Accepted-OAuth-Scopes": [""], "X-RateLimit-Reset": ["1533044057"]}, "status": {"message": "OK", "code": 200}, "url": "https://api.github.com/repos/sigmavirus24/github3.py/pulls/873/requested_reviewers"}, "recorded_at": "2018-07-31T12:38:26"}], "recorded_with": "betamax/0.8.1"}

0 commit comments

Comments
 (0)