From 2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52 Mon Sep 17 00:00:00 2001 From: Aaron Levine Date: Mon, 20 Mar 2017 14:44:26 -0600 Subject: [PATCH] Add Support for Pull Request Reviews feature --- github/PullRequest.py | 42 +++++++++ github/PullRequestReview.py | 121 ++++++++++++++++++++++++++ github/PullRequestReviewerRequests.py | 68 +++++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 github/PullRequestReview.py create mode 100644 github/PullRequestReviewerRequests.py diff --git a/github/PullRequest.py b/github/PullRequest.py index 823a0291..e0515738 100644 --- a/github/PullRequest.py +++ b/github/PullRequest.py @@ -37,6 +37,8 @@ import github.PullRequestComment import github.File import github.IssueComment import github.Commit +import github.PullRequestReview +import github.PullRequestReviewerRequests class PullRequest(github.GithubObject.CompletableGithubObject): @@ -495,6 +497,46 @@ class PullRequest(github.GithubObject.CompletableGithubObject): None ) + def get_review(self, id): + """ + :calls: `GET /repos/:owner/:repo/pulls/:number/reviews/:id `_ + :param id: integer + :rtype: :class:`github.PullRequestReview.PullRequestReview` + """ + assert isinstance(id, (int, long)), id + headers, data = self._requester.requestJsonAndCheck( + "GET", + self.url + "/reviews/" + str(id), + headers={'Accept': 'application/vnd.github.black-cat-preview+json'} + ) + return github.PullRequestReview.PullRequestReview(self._requester, headers, data, completed=True) + + def get_reviews(self): + """ + :calls: `GET /repos/:owner/:repo/pulls/:number/reviews `_ + :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.PullRequestReview.PullRequestReview` + """ + return github.PaginatedList.PaginatedList( + github.PullRequestReview.PullRequestReview, + self._requester, + self.url + "/reviews", + None, + headers={'Accept': 'application/vnd.github.black-cat-preview+json'} + ) + + def get_review_requests(self): + """ + :calls: `GET /repos/:owner/:repo/pulls/:number/requested_reviewers `_ + :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.InspectionReviewers.InspectionReviewers` + """ + return github.PaginatedList.PaginatedList( + github.PullRequestReviewerRequests.PullRequestReviewerRequests, + self._requester, + self.url + "/requested_reviewers", + None, + headers={'Accept': 'application/vnd.github.black-cat-preview+json'} + ) + def is_merged(self): """ :calls: `GET /repos/:owner/:repo/pulls/:number/merge `_ diff --git a/github/PullRequestReview.py b/github/PullRequestReview.py new file mode 100644 index 00000000..1c2189ee --- /dev/null +++ b/github/PullRequestReview.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- + +# ########################## Copyrights and license ############################ +# # +# Copyright 2012 Vincent Jacques # +# Copyright 2012 Zearin # +# Copyright 2013 AKFish # +# Copyright 2013 Michael Stead # +# Copyright 2013 Vincent Jacques # +# # +# This file is part of PyGithub. # +# http://pygithub.github.io/PyGithub/v1/index.html # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +# ############################################################################## + +import github.GithubObject + +import github.NamedUser + + +class PullRequestReview(github.GithubObject.CompletableGithubObject): + """ + This class represents Pull Request Reviews as returned for example by https://developer.github.com/v3/pulls/reviews/ + """ + + def __repr__(self): + return self.get__repr__({"id": self._id.value, "user": self._user.value}) + + @property + def id(self): + """ + :type: integer + """ + self._completeIfNotSet(self._id) + return self._id.value + + @property + def user(self): + """ + :type: :class:`github.NamedUser.NamedUser` + """ + self._completeIfNotSet(self._user) + return self._user.value + + @property + def body(self): + """ + :type: string + """ + self._completeIfNotSet(self._body) + return self._body.value + + @property + def commit_id(self): + """ + :type: string + """ + self._completeIfNotSet(self._commit_id) + return self._commit_id.value + + @property + def state(self): + """ + :type: string + """ + self._completeIfNotSet(self._state) + return self._state.value + + @property + def html_url(self): + """ + :type: string + """ + self._completeIfNotSet(self._html_url) + return self._html_url.value + + @property + def pull_request_url(self): + """ + :type: string + """ + self._completeIfNotSet(self._pull_request_url) + return self._pull_request_url.value + + def _initAttributes(self): + self._id = github.GithubObject.NotSet + self._user = github.GithubObject.NotSet + self._body = github.GithubObject.NotSet + self._commit_id = github.GithubObject.NotSet + self._state = github.GithubObject.NotSet + self._html_url = github.GithubObject.NotSet + self._pull_request_url = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "id" in attributes: # pragma no branch + self._id = self._makeIntAttribute(attributes["id"]) + if "user" in attributes: # pragma no branch + self._user = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["user"]) + if "body" in attributes: # pragma no branch + self._body = self._makeStringAttribute(attributes["body"]) + if "commit_id" in attributes: # pragma no branch + self._commit_id = self._makeStringAttribute(attributes["commit_id"]) + if "state" in attributes: # pragma no branch + self._state = self._makeStringAttribute(attributes["state"]) + if "html_url" in attributes: # pragma no branch + self._html_url = self._makeStringAttribute(attributes["html_url"]) + if "pull_request_url" in attributes: # pragma no branch + self._pull_request_url = self._makeStringAttribute(attributes["pull_request_url"]) diff --git a/github/PullRequestReviewerRequests.py b/github/PullRequestReviewerRequests.py new file mode 100644 index 00000000..8daf5753 --- /dev/null +++ b/github/PullRequestReviewerRequests.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- + +# ########################## Copyrights and license ############################ +# # +# Copyright 2012 Vincent Jacques # +# Copyright 2012 Zearin # +# Copyright 2013 AKFish # +# Copyright 2013 Michael Stead # +# Copyright 2013 Vincent Jacques # +# # +# This file is part of PyGithub. # +# http://pygithub.github.io/PyGithub/v1/index.html # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +# ############################################################################## + +import github.GithubObject + +import github.NamedUser + + +class PullRequestReviewerRequests(github.GithubObject.CompletableGithubObject): + """ + This class represents Pull Request Reviewer Requests as returned for example by https://developer.github.com/v3/pulls/review_requests/ + """ + + def __repr__(self): + return self.get__repr__({"id": self._id.value, "login": self._login.value}) + + @property + def login(self): + """ + :type: string + """ + self._completeIfNotSet(self._login) + return self._login.value + + @property + def id(self): + """ + :type: integer + """ + self._completeIfNotSet(self._id) + return self._id.value + + def _initAttributes(self): + self._login = github.GithubObject.NotSet + self._id = github.GithubObject.NotSet +# self._url = github.GithubObject.NotSet +# self._html_url = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "login" in attributes: # pragma no branch + self._login = self._makeStringAttribute(attributes["login"]) + if "id" in attributes: # pragma no branch + self._id = self._makeIntAttribute(attributes["id"])