Repository: PyGithub/PyGithub

Issue:
Add support for creating Review Requests
I just saw the update in #538 that added support for the GET methods for review requests, but it looks like the API for review requests is out of beta now, and the [POST methods are now available](https://developer.github.com/v3/pulls/review_requests/#create-a-review-request).  It would be awesome to be able to do these through the Python API.


Discussion:

Resolving patch:
diff --git a/github/PullRequest.py b/github/PullRequest.py
--- a/github/PullRequest.py
+++ b/github/PullRequest.py
@@ -49,7 +49,6 @@
 import github.IssueComment
 import github.Commit
 import github.PullRequestReview
-import github.PullRequestReviewerRequest
 
 
 class PullRequest(github.GithubObject.CompletableGithubObject):
@@ -438,6 +437,46 @@ def create_review(self, commit, body, event=github.GithubObject.NotSet, comments
         self._useAttributes(data)
         return github.PullRequestReview.PullRequestReview(self._requester, headers, data, completed=True)
 
+    def create_review_request(self, reviewers=github.GithubObject.NotSet, team_reviewers=github.GithubObject.NotSet):
+        """
+        :calls `POST /repos/:owner/:repo/pulls/:number/requested_reviewers <https://developer.github.com/v3/pulls/review_requests/>`_
+        :param reviewers: list of strings
+        :param team_reviewers: list of strings
+        :rtype: None
+        """
+        post_parameters = dict()
+        if reviewers is not github.GithubObject.NotSet:
+            assert all(isinstance(element, (str, unicode)) for element in reviewers), reviewers
+            post_parameters["reviewers"] = reviewers
+        if team_reviewers is not github.GithubObject.NotSet:
+            assert all(isinstance(element, (str, unicode)) for element in team_reviewers), team_reviewers
+            post_parameters["team_reviewers"] = team_reviewers
+        headers, data = self._requester.requestJsonAndCheck(
+            "POST",
+            self.url + "/requested_reviewers",
+            input=post_parameters
+        )
+
+    def delete_review_request(self, reviewers=github.GithubObject.NotSet, team_reviewers=github.GithubObject.NotSet):
+        """
+        :calls `DELETE /repos/:owner/:repo/pulls/:number/requested_reviewers <https://developer.github.com/v3/pulls/review_requests/>`_
+        :param reviewers: list of strings
+        :param team_reviewers: list of strings
+        :rtype: None
+        """
+        post_parameters = dict()
+        if reviewers is not github.GithubObject.NotSet:
+            assert all(isinstance(element, (str, unicode)) for element in reviewers), reviewers
+            post_parameters["reviewers"] = reviewers
+        if team_reviewers is not github.GithubObject.NotSet:
+            assert all(isinstance(element, (str, unicode)) for element in team_reviewers), team_reviewers
+            post_parameters["team_reviewers"] = team_reviewers
+        headers, data = self._requester.requestJsonAndCheck(
+            "DELETE",
+            self.url + "/requested_reviewers",
+            input=post_parameters
+        )
+
     def edit(self, title=github.GithubObject.NotSet, body=github.GithubObject.NotSet, state=github.GithubObject.NotSet, base=github.GithubObject.NotSet):
         """
         :calls: `PATCH /repos/:owner/:repo/pulls/:number <http://developer.github.com/v3/pulls>`_
@@ -601,17 +640,26 @@ def get_reviews(self):
             None,
         )
 
-    def get_reviewer_requests(self):
+    def get_review_requests(self):
         """
         :calls: `GET /repos/:owner/:repo/pulls/:number/requested_reviewers <https://developer.github.com/v3/pulls/review_requests/>`_
-        :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.PullRequestReviewerRequest.PullRequestReviewerRequest`
-        """
-        return github.PaginatedList.PaginatedList(
-            github.PullRequestReviewerRequest.PullRequestReviewerRequest,
-            self._requester,
-            self.url + "/requested_reviewers",
-            None,
-            list_item='users'
+        :rtype: tuple of :class:`github.PaginatedList.PaginatedList` of :class:`github.NamedUser.NamedUser` and of :class:`github.PaginatedList.PaginatedList` of :class:`github.Team.Team`
+        """
+        return (
+            github.PaginatedList.PaginatedList(
+                github.NamedUser.NamedUser,
+                self._requester,
+                self.url + "/requested_reviewers",
+                None,
+                list_item='users'
+            ),
+            github.PaginatedList.PaginatedList(
+                github.Team.Team,
+                self._requester,
+                self.url + "/requested_reviewers",
+                None,
+                list_item='teams'
+            )
         )
 
     def get_labels(self):
diff --git a/github/PullRequestReviewerRequest.py b/github/PullRequestReviewerRequest.py
deleted file mode 100644
--- a/github/PullRequestReviewerRequest.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-
-############################ Copyrights and license ############################
-#                                                                              #
-# Copyright 2017 Aaron Levine <allevin@sandia.gov>                             #
-# Copyright 2018 Wan Liuyang <tsfdye@gmail.com>                                #
-# Copyright 2018 sfdye <tsfdye@gmail.com>                                      #
-#                                                                              #
-# This file is part of PyGithub.                                               #
-# http://pygithub.readthedocs.io/                                              #
-#                                                                              #
-# 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 <http://www.gnu.org/licenses/>.             #
-#                                                                              #
-################################################################################
-
-import github.GithubObject
-
-import github.NamedUser
-
-
-class PullRequestReviewerRequest(github.GithubObject.CompletableGithubObject):
-    """
-    This class represents PullRequestReviewerRequests. The reference can be found here 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
-
-    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"])


Test patch:
diff --git a/github/tests/AllTests.py b/github/tests/AllTests.py
--- a/github/tests/AllTests.py
+++ b/github/tests/AllTests.py
@@ -70,7 +70,6 @@
 from PullRequest import *
 from PullRequestComment import *
 from PullRequestReview import *
-from PullRequestReviewerRequests import *
 from PullRequestFile import *
 from RateLimiting import *
 from Repository import *
diff --git a/github/tests/PullRequest.py b/github/tests/PullRequest.py
--- a/github/tests/PullRequest.py
+++ b/github/tests/PullRequest.py
@@ -98,6 +98,16 @@ def testGetIssueComment(self):
         comment = self.pull.get_issue_comment(8387331)
         self.assertEqual(comment.body, "Issue comment created by PyGithub")
 
+    def testReviewRequests(self):
+        self.pull.create_review_request(reviewers="sfdye", team_reviewers="pygithub-owners")
+        review_requests = self.pull.get_review_requests()
+        self.assertListKeyEqual(review_requests[0], lambda c: c.login, ["sfdye"])
+        self.assertListKeyEqual(review_requests[1], lambda c: c.slug, ["pygithub-owners"])
+        self.pull.delete_review_request(reviewers="sfdye")
+        review_requests = self.pull.get_review_requests()
+        self.assertEqual(list(review_requests[0]), [])
+        self.assertListKeyEqual(review_requests[1], lambda c: c.slug, ["pygithub-owners"])
+
     def testEditWithoutArguments(self):
         self.pull.edit()
 
diff --git a/github/tests/PullRequestReviewerRequests.py b/github/tests/PullRequestReviewerRequests.py
deleted file mode 100644
--- a/github/tests/PullRequestReviewerRequests.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-
-############################ Copyrights and license ############################
-#                                                                              #
-# Copyright 2017 Aaron Levine <allevin@sandia.gov>                             #
-# Copyright 2017 Simon <spam@esemi.ru>                                         #
-# Copyright 2018 sfdye <tsfdye@gmail.com>                                      #
-#                                                                              #
-# This file is part of PyGithub.                                               #
-# http://pygithub.readthedocs.io/                                              #
-#                                                                              #
-# 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 <http://www.gnu.org/licenses/>.             #
-#                                                                              #
-################################################################################
-
-import Framework
-
-
-class PullRequestReviewerRequests(Framework.TestCase):
-    def setUp(self):
-        Framework.TestCase.setUp(self)
-        self.repo = self.g.get_repo("PyGithub/PyGithub")
-        self.pull = self.repo.get_pull(538)
-
-        self.pullreviewerrequests = self.pull.get_reviewer_requests()
-        self.pullreviewerrequest = self.pullreviewerrequests[0]
-
-    def testAttributes(self):
-
-        self.assertEqual(self.pullreviewerrequest.id, 2930472)
-        self.assertEqual(self.pullreviewerrequest.login, "jayfk")
-
-        # test __repr__() based on this attributes
-        self.assertEqual(self.pullreviewerrequest.__repr__(), 'PullRequestReviewerRequest(login="jayfk", id=2930472)')
diff --git a/github/tests/ReplayData/PullRequest.testReviewRequests.txt b/github/tests/ReplayData/PullRequest.testReviewRequests.txt
new file mode 100644
--- /dev/null
+++ b/github/tests/ReplayData/PullRequest.testReviewRequests.txt
@@ -0,0 +1,66 @@
+https
+POST
+api.github.com
+None
+/repos/jacquev6/PyGithub/pulls/31/requested_reviewers
+{'Authorization': 'Basic login_and_password_removed', 'Content-Type': 'application/json', 'User-Agent': 'PyGithub/Python'}
+{"reviewers":"sfdye","team_reviewers":"pygithub-owners"}
+201
+''
+
+
+https
+GET
+api.github.com
+None
+/repos/jacquev6/PyGithub/pulls/31/requested_reviewers
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('content-length', '1153'), ('server', 'nginx'), ('last-modified', 'Sat, 03 Nov 2012 08:19:40 GMT'), ('connection', 'keep-alive'), ('etag', '"1ec7d9f2ebb27db7dc002f1382d23975"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Sat, 03 Nov 2012 08:19:46 GMT'), ('content-type', 'application/json; charset=utf-8')]
+{"users":[{"login":"sfdye","id":343369,"avatar_url":"https://avatars2.githubusercontent.com/u/343369?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false}],"teams":[{"name":"pygithub-owners","id":585225,"slug":"pygithub-owners","description":"","privacy":"closed","url":"https://api.github.com/teams/585225","members_url":"https://api.github.com/teams/585225/members{/member}","repositories_url":"https://api.github.com/teams/585225/repos","permission":"pull"}]}
+
+https
+GET
+api.github.com
+None
+/repos/jacquev6/PyGithub/pulls/31/requested_reviewers
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('content-length', '1153'), ('server', 'nginx'), ('last-modified', 'Sat, 03 Nov 2012 08:19:40 GMT'), ('connection', 'keep-alive'), ('etag', '"1ec7d9f2ebb27db7dc002f1382d23975"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Sat, 03 Nov 2012 08:19:46 GMT'), ('content-type', 'application/json; charset=utf-8')]
+{"users":[{"login":"sfdye","id":343369,"avatar_url":"https://avatars2.githubusercontent.com/u/343369?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false}],"teams":[{"name":"pygithub-owners","id":585225,"slug":"pygithub-owners","description":"","privacy":"closed","url":"https://api.github.com/teams/585225","members_url":"https://api.github.com/teams/585225/members{/member}","repositories_url":"https://api.github.com/teams/585225/repos","permission":"pull"}]}
+
+https
+DELETE
+api.github.com
+None
+/repos/jacquev6/PyGithub/pulls/31/requested_reviewers
+{'Authorization': 'Basic login_and_password_removed', 'Content-Type': 'application/json', 'User-Agent': 'PyGithub/Python'}
+{"reviewers":"sfdye"}
+204
+''
+
+
+https
+GET
+api.github.com
+None
+/repos/jacquev6/PyGithub/pulls/31/requested_reviewers
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('content-length', '318'), ('server', 'nginx'), ('last-modified', 'Sat, 03 Nov 2012 08:19:40 GMT'), ('connection', 'keep-alive'), ('etag', '"1ec7d9f2ebb27db7dc002f1382d23975"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Sat, 03 Nov 2012 08:19:46 GMT'), ('content-type', 'application/json; charset=utf-8')]
+{"users":[],"teams":[{"name":"pygithub-owners","id":585225,"slug":"pygithub-owners","description":"","privacy":"closed","url":"https://api.github.com/teams/585225","members_url":"https://api.github.com/teams/585225/members{/member}","repositories_url":"https://api.github.com/teams/585225/repos","permission":"pull"}]}
+
+https
+GET
+api.github.com
+None
+/repos/jacquev6/PyGithub/pulls/31/requested_reviewers
+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
+None
+200
+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('content-length', '318'), ('server', 'nginx'), ('last-modified', 'Sat, 03 Nov 2012 08:19:40 GMT'), ('connection', 'keep-alive'), ('etag', '"1ec7d9f2ebb27db7dc002f1382d23975"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Sat, 03 Nov 2012 08:19:46 GMT'), ('content-type', 'application/json; charset=utf-8')]
+{"users":[],"teams":[{"name":"pygithub-owners","id":585225,"slug":"pygithub-owners","description":"","privacy":"closed","url":"https://api.github.com/teams/585225","members_url":"https://api.github.com/teams/585225/members{/member}","repositories_url":"https://api.github.com/teams/585225/repos","permission":"pull"}]}
+
diff --git a/github/tests/ReplayData/PullRequestReviewerRequests.setUp.txt b/github/tests/ReplayData/PullRequestReviewerRequests.setUp.txt
deleted file mode 100644
--- a/github/tests/ReplayData/PullRequestReviewerRequests.setUp.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-https
-GET
-api.github.com
-None
-/repos/PyGithub/PyGithub/pulls/538
-{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
-None
-200
-[('content-length', '14726'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('x-served-by', 'a474937f3b2fa272558fa6dc951018ad'), ('x-oauth-scopes', 'gist, repo, user'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('x-accepted-oauth-scopes', ''), ('etag', '"f375b2b7b6eb9081788c5e3b1dedba0e"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('status', '200 OK'), ('x-ratelimit-remaining', '4952'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', 'C19A:69E1:10370BA:13FF894:58D559AE'), ('last-modified', 'Wed, 22 Mar 2017 19:07:28 GMT'), ('date', 'Fri, 24 Mar 2017 17:38:54 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1490379624')]
-{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538","id":111649703,"html_url":"https://github.com/PyGithub/PyGithub/pull/538","diff_url":"https://github.com/PyGithub/PyGithub/pull/538.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/538.patch","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538","number":538,"state":"open","locked":false,"title":"Add Support for Pull Request Reviews feature","user":{"login":"allevin","id":13543471,"avatar_url":"https://avatars1.githubusercontent.com/u/13543471?v=3","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"body":"Adding support to Pull Request class to access new Github API features [Pull Request reviews](https://developer.github.com/v3/pulls/reviews/) and [Pull Request Reviewer Requests](https://developer.github.com/v3/pulls/review_requests/)\r\n\r\nThe API's is still in beta.  \r\n\r\nI approached this by providing a minimal set of routines to access the list of reviews or a specific review.  Also access to get a list of Reviewer requests.   \r\n\r\nBecause the API is still early in Beta, I choose not to implement the create/delete/edit features, but the infrastructure should be in place for future improvements.\r\n\r\n","created_at":"2017-03-20T21:00:37Z","updated_at":"2017-03-22T19:07:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"764e59cb251dc0e9aab5be993d4451b35f91b685","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/commits","review_comments_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/comments","review_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/7a0fcb27b7cd6c346fc3f76216ccb6e0f4ca3bcc","head":{"label":"allevin:Add_Pull_Request_Reviews_Feature","ref":"Add_Pull_Request_Reviews_Feature","sha":"7a0fcb27b7cd6c346fc3f76216ccb6e0f4ca3bcc","user":{"login":"allevin","id":13543471,"avatar_url":"https://avatars1.githubusercontent.com/u/13543471?v=3","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"repo":{"id":85619926,"name":"PyGithub","full_name":"allevin/PyGithub","owner":{"login":"allevin","id":13543471,"avatar_url":"https://avatars1.githubusercontent.com/u/13543471?v=3","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/allevin/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/allevin/PyGithub","forks_url":"https://api.github.com/repos/allevin/PyGithub/forks","keys_url":"https://api.github.com/repos/allevin/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/allevin/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/allevin/PyGithub/teams","hooks_url":"https://api.github.com/repos/allevin/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/allevin/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/allevin/PyGithub/events","assignees_url":"https://api.github.com/repos/allevin/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/allevin/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/allevin/PyGithub/tags","blobs_url":"https://api.github.com/repos/allevin/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/allevin/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/allevin/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/allevin/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/allevin/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/allevin/PyGithub/languages","stargazers_url":"https://api.github.com/repos/allevin/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/allevin/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/allevin/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/allevin/PyGithub/subscription","commits_url":"https://api.github.com/repos/allevin/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/allevin/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/allevin/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/allevin/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/allevin/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/allevin/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/allevin/PyGithub/merges","archive_url":"https://api.github.com/repos/allevin/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/allevin/PyGithub/downloads","issues_url":"https://api.github.com/repos/allevin/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/allevin/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/allevin/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/allevin/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/allevin/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/allevin/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/allevin/PyGithub/deployments","created_at":"2017-03-20T19:55:57Z","updated_at":"2017-03-20T19:56:01Z","pushed_at":"2017-03-23T18:08:52Z","git_url":"git://github.com/allevin/PyGithub.git","ssh_url":"git@github.com:allevin/PyGithub.git","clone_url":"https://github.com/allevin/PyGithub.git","svn_url":"https://github.com/allevin/PyGithub","homepage":"","size":12131,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"PyGithub:master","ref":"master","sha":"414f6e648f4da87f10bae7d01948a63dc82b80f8","user":{"login":"PyGithub","id":11288996,"avatar_url":"https://avatars3.githubusercontent.com/u/11288996?v=3","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"repo":{"id":3544490,"name":"PyGithub","full_name":"PyGithub/PyGithub","owner":{"login":"PyGithub","id":11288996,"avatar_url":"https://avatars3.githubusercontent.com/u/11288996?v=3","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2017-03-22T13:29:26Z","pushed_at":"2017-03-21T19:00:19Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"","size":12133,"stargazers_count":1221,"watchers_count":1221,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":403,"mirror_url":null,"open_issues_count":124,"forks":403,"open_issues":124,"watchers":1221,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538"},"html":{"href":"https://github.com/PyGithub/PyGithub/pull/538"},"issue":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/538"},"comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments"},"review_comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/comments"},"review_comment":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/commits"},"statuses":{"href":"https://api.github.com/repos/PyGithub/PyGithub/statuses/7a0fcb27b7cd6c346fc3f76216ccb6e0f4ca3bcc"}},"merged":false,"mergeable":true,"mergeable_state":"unstable","merged_by":null,"comments":3,"review_comments":0,"maintainer_can_modify":true,"commits":3,"additions":329,"deletions":0,"changed_files":6}
-
-https
-GET
-api.github.com
-None
-/repos/PyGithub/PyGithub/pulls/538/requested_reviewers
-{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
-None
-200
-[('content-length', '839'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('x-served-by', '07ff1c8a09e44b62e277fae50a1b1dc4'), ('x-oauth-scopes', 'gist, repo, user'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('x-accepted-oauth-scopes', ''), ('etag', '"bc596203c153ef71a3f3e99a908de946"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('status', '200 OK'), ('x-ratelimit-remaining', '4951'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', 'C19B:69EB:2590DF2:2ECC945:58D559AE'), ('date', 'Fri, 24 Mar 2017 17:38:55 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1490379624')]
-[{"login":"jayfk","id":2930472,"avatar_url":"https://avatars1.githubusercontent.com/u/2930472?v=3","gravatar_id":"","url":"https://api.github.com/users/jayfk","html_url":"https://github.com/jayfk","followers_url":"https://api.github.com/users/jayfk/followers","following_url":"https://api.github.com/users/jayfk/following{/other_user}","gists_url":"https://api.github.com/users/jayfk/gists{/gist_id}","starred_url":"https://api.github.com/users/jayfk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayfk/subscriptions","organizations_url":"https://api.github.com/users/jayfk/orgs","repos_url":"https://api.github.com/users/jayfk/repos","events_url":"https://api.github.com/users/jayfk/events{/privacy}","received_events_url":"https://api.github.com/users/jayfk/received_events","type":"User","site_admin":false}]
-