diff --git a/github/AuthenticatedUser.py b/github/AuthenticatedUser.py index d403893f..67a289c3 100644 --- a/github/AuthenticatedUser.py +++ b/github/AuthenticatedUser.py @@ -257,9 +257,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", "/user/emails", - None, - None, - post_parameters + input=post_parameters ) def add_to_following(self, following): @@ -271,10 +269,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(following, github.NamedUser.NamedUser), following headers, data = self._requester.requestJsonAndCheck( "PUT", - "/user/following/" + following._identity, - None, - None, - None + "/user/following/" + following._identity ) def add_to_starred(self, starred): @@ -286,10 +281,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(starred, github.Repository.Repository), starred headers, data = self._requester.requestJsonAndCheck( "PUT", - "/user/starred/" + starred._identity, - None, - None, - None + "/user/starred/" + starred._identity ) def add_to_subscriptions(self, subscription): @@ -301,10 +293,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(subscription, github.Repository.Repository), subscription headers, data = self._requester.requestJsonAndCheck( "PUT", - "/user/subscriptions/" + subscription._identity, - None, - None, - None + "/user/subscriptions/" + subscription._identity ) def add_to_watched(self, watched): @@ -316,10 +305,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(watched, github.Repository.Repository), watched headers, data = self._requester.requestJsonAndCheck( "PUT", - "/user/watched/" + watched._identity, - None, - None, - None + "/user/watched/" + watched._identity ) def create_authorization(self, scopes=github.GithubObject.NotSet, note=github.GithubObject.NotSet, note_url=github.GithubObject.NotSet, client_id=github.GithubObject.NotSet, client_secret=github.GithubObject.NotSet): @@ -351,9 +337,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", "/authorizations", - None, - None, - post_parameters + input=post_parameters ) return github.Authorization.Authorization(self._requester, headers, data, completed=True) @@ -366,10 +350,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(repo, github.Repository.Repository), repo headers, data = self._requester.requestJsonAndCheck( "POST", - "/repos/" + repo.owner.login + "/" + repo.name + "/forks", - None, - None, - None + "/repos/" + repo.owner.login + "/" + repo.name + "/forks" ) return github.Repository.Repository(self._requester, headers, data, completed=True) @@ -393,9 +374,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", "/gists", - None, - None, - post_parameters + input=post_parameters ) return github.Gist.Gist(self._requester, headers, data, completed=True) @@ -415,9 +394,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", "/user/keys", - None, - None, - post_parameters + input=post_parameters ) return github.UserKey.UserKey(self._requester, headers, data, completed=True) @@ -466,9 +443,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", "/user/repos", - None, - None, - post_parameters + input=post_parameters ) return github.Repository.Repository(self._requester, headers, data, completed=True) @@ -509,9 +484,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", "/user", - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) @@ -524,10 +497,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - "/authorizations/" + str(id), - None, - None, - None + "/authorizations/" + str(id) ) return github.Authorization.Authorization(self._requester, headers, data, completed=True) @@ -550,10 +520,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "GET", - "/user/emails", - None, - None, - None + "/user/emails" ) return data @@ -690,10 +657,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - "/user/keys/" + str(id), - None, - None, - None + "/user/keys/" + str(id) ) return github.UserKey.UserKey(self._requester, headers, data, completed=True) @@ -718,10 +682,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(id, (str, unicode)), id headers, data = self._requester.requestJsonAndCheck( "GET", - "/notifications/threads/" + id, - None, - None, - None + "/notifications/threads/" + id ) return github.Notification.Notification(self._requester, headers, data, completed=True) @@ -783,10 +744,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(name, (str, unicode)), name headers, data = self._requester.requestJsonAndCheck( "GET", - "/repos/" + self.login + "/" + name, - None, - None, - None + "/repos/" + self.login + "/" + name ) return github.Repository.Repository(self._requester, headers, data, completed=True) @@ -872,10 +830,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(following, github.NamedUser.NamedUser), following status, headers, data = self._requester.requestJson( "GET", - "/user/following/" + following._identity, - None, - None, - None + "/user/following/" + following._identity ) return status == 204 @@ -888,10 +843,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(starred, github.Repository.Repository), starred status, headers, data = self._requester.requestJson( "GET", - "/user/starred/" + starred._identity, - None, - None, - None + "/user/starred/" + starred._identity ) return status == 204 @@ -904,10 +856,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(subscription, github.Repository.Repository), subscription status, headers, data = self._requester.requestJson( "GET", - "/user/subscriptions/" + subscription._identity, - None, - None, - None + "/user/subscriptions/" + subscription._identity ) return status == 204 @@ -920,10 +869,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(watched, github.Repository.Repository), watched status, headers, data = self._requester.requestJson( "GET", - "/user/watched/" + watched._identity, - None, - None, - None + "/user/watched/" + watched._identity ) return status == 204 @@ -938,9 +884,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "DELETE", "/user/emails", - None, - None, - post_parameters + input=post_parameters ) def remove_from_following(self, following): @@ -952,10 +896,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(following, github.NamedUser.NamedUser), following headers, data = self._requester.requestJsonAndCheck( "DELETE", - "/user/following/" + following._identity, - None, - None, - None + "/user/following/" + following._identity ) def remove_from_starred(self, starred): @@ -967,10 +908,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(starred, github.Repository.Repository), starred headers, data = self._requester.requestJsonAndCheck( "DELETE", - "/user/starred/" + starred._identity, - None, - None, - None + "/user/starred/" + starred._identity ) def remove_from_subscriptions(self, subscription): @@ -982,10 +920,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(subscription, github.Repository.Repository), subscription headers, data = self._requester.requestJsonAndCheck( "DELETE", - "/user/subscriptions/" + subscription._identity, - None, - None, - None + "/user/subscriptions/" + subscription._identity ) def remove_from_watched(self, watched): @@ -997,10 +932,7 @@ class AuthenticatedUser(github.GithubObject.CompletableGithubObject): assert isinstance(watched, github.Repository.Repository), watched headers, data = self._requester.requestJsonAndCheck( "DELETE", - "/user/watched/" + watched._identity, - None, - None, - None + "/user/watched/" + watched._identity ) def _initAttributes(self): diff --git a/github/Authorization.py b/github/Authorization.py index f287a2b6..a004fedf 100644 --- a/github/Authorization.py +++ b/github/Authorization.py @@ -113,10 +113,7 @@ class Authorization(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, scopes=github.GithubObject.NotSet, add_scopes=github.GithubObject.NotSet, remove_scopes=github.GithubObject.NotSet, note=github.GithubObject.NotSet, note_url=github.GithubObject.NotSet): @@ -148,9 +145,7 @@ class Authorization(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/Commit.py b/github/Commit.py index ad744e39..828da3fe 100644 --- a/github/Commit.py +++ b/github/Commit.py @@ -130,9 +130,7 @@ class Commit(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/comments", - None, - None, - post_parameters + input=post_parameters ) return github.CommitComment.CommitComment(self._requester, headers, data, completed=True) @@ -157,9 +155,7 @@ class Commit(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self._parentUrl(self._parentUrl(self.url)) + "/statuses/" + self.sha, - None, - None, - post_parameters + input=post_parameters ) return github.CommitStatus.CommitStatus(self._requester, headers, data, completed=True) diff --git a/github/CommitComment.py b/github/CommitComment.py index 061737bf..c2c897d1 100644 --- a/github/CommitComment.py +++ b/github/CommitComment.py @@ -129,10 +129,7 @@ class CommitComment(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, body): @@ -148,9 +145,7 @@ class CommitComment(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/Download.py b/github/Download.py index a4b3b656..2cd057ca 100644 --- a/github/Download.py +++ b/github/Download.py @@ -199,10 +199,7 @@ class Download(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def _initAttributes(self): diff --git a/github/Gist.py b/github/Gist.py index de4ded9e..65de668e 100644 --- a/github/Gist.py +++ b/github/Gist.py @@ -172,9 +172,7 @@ class Gist(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/comments", - None, - None, - post_parameters + input=post_parameters ) return github.GistComment.GistComment(self._requester, headers, data, completed=True) @@ -185,10 +183,7 @@ class Gist(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "POST", - self.url + "/forks", - None, - None, - None + self.url + "/forks" ) return Gist(self._requester, headers, data, completed=True) @@ -199,10 +194,7 @@ class Gist(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, description=github.GithubObject.NotSet, files=github.GithubObject.NotSet): @@ -222,9 +214,7 @@ class Gist(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) @@ -237,10 +227,7 @@ class Gist(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/comments/" + str(id), - None, - None, - None + self.url + "/comments/" + str(id) ) return github.GistComment.GistComment(self._requester, headers, data, completed=True) @@ -263,10 +250,7 @@ class Gist(github.GithubObject.CompletableGithubObject): """ status, headers, data = self._requester.requestJson( "GET", - self.url + "/star", - None, - None, - None + self.url + "/star" ) return status == 204 @@ -277,10 +261,7 @@ class Gist(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url + "/star", - None, - None, - None + self.url + "/star" ) def set_starred(self): @@ -290,10 +271,7 @@ class Gist(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "PUT", - self.url + "/star", - None, - None, - None + self.url + "/star" ) def _initAttributes(self): diff --git a/github/GistComment.py b/github/GistComment.py index f0b5c80c..5ee0664c 100644 --- a/github/GistComment.py +++ b/github/GistComment.py @@ -89,10 +89,7 @@ class GistComment(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, body): @@ -108,9 +105,7 @@ class GistComment(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/GitRef.py b/github/GitRef.py index 84ec00c5..97a2ca4d 100644 --- a/github/GitRef.py +++ b/github/GitRef.py @@ -65,10 +65,7 @@ class GitRef(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, sha, force=github.GithubObject.NotSet): @@ -88,9 +85,7 @@ class GitRef(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/GithubObject.py b/github/GithubObject.py index c2ae7f6d..91c079b7 100644 --- a/github/GithubObject.py +++ b/github/GithubObject.py @@ -141,10 +141,7 @@ class CompletableGithubObject(GithubObject): def __complete(self): headers, data = self._requester.requestJsonAndCheck( "GET", - self._url, - None, - None, - None + self._url ) self._storeAndUseAttributes(headers, data) self.__completed = True @@ -163,9 +160,7 @@ class CompletableGithubObject(GithubObject): status, responseHeaders, output = self._requester.requestJson( "GET", self._url, - None, - conditionalRequestHeader, - None + headers=conditionalRequestHeader ) if status == 304: return False diff --git a/github/Hook.py b/github/Hook.py index ea0be67b..447a0e9a 100644 --- a/github/Hook.py +++ b/github/Hook.py @@ -113,10 +113,7 @@ class Hook(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, name, config, events=github.GithubObject.NotSet, add_events=github.GithubObject.NotSet, remove_events=github.GithubObject.NotSet, active=github.GithubObject.NotSet): @@ -151,9 +148,7 @@ class Hook(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) @@ -164,10 +159,7 @@ class Hook(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "POST", - self.url + "/tests", - None, - None, - None + self.url + "/tests" ) def _initAttributes(self): diff --git a/github/Issue.py b/github/Issue.py index 260967d3..b849e8d4 100644 --- a/github/Issue.py +++ b/github/Issue.py @@ -203,9 +203,7 @@ class Issue(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/labels", - None, - None, - post_parameters + input=post_parameters ) def create_comment(self, body): @@ -221,9 +219,7 @@ class Issue(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/comments", - None, - None, - post_parameters + input=post_parameters ) return github.IssueComment.IssueComment(self._requester, headers, data, completed=True) @@ -234,10 +230,7 @@ class Issue(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url + "/labels", - None, - None, - None + self.url + "/labels" ) def edit(self, title=github.GithubObject.NotSet, body=github.GithubObject.NotSet, assignee=github.GithubObject.NotSet, state=github.GithubObject.NotSet, milestone=github.GithubObject.NotSet, labels=github.GithubObject.NotSet): @@ -273,9 +266,7 @@ class Issue(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) @@ -288,10 +279,7 @@ class Issue(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - self._parentUrl(self.url) + "/comments/" + str(id), - None, - None, - None + self._parentUrl(self.url) + "/comments/" + str(id) ) return github.IssueComment.IssueComment(self._requester, headers, data, completed=True) @@ -340,10 +328,7 @@ class Issue(github.GithubObject.CompletableGithubObject): assert isinstance(label, github.Label.Label), label headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url + "/labels/" + label._identity, - None, - None, - None + self.url + "/labels/" + label._identity ) def set_labels(self, *labels): @@ -357,9 +342,7 @@ class Issue(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PUT", self.url + "/labels", - None, - None, - post_parameters + input=post_parameters ) @property diff --git a/github/IssueComment.py b/github/IssueComment.py index c1af97f8..149a6f6f 100644 --- a/github/IssueComment.py +++ b/github/IssueComment.py @@ -98,10 +98,7 @@ class IssueComment(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, body): @@ -117,9 +114,7 @@ class IssueComment(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/Label.py b/github/Label.py index b961af18..813cd5f0 100644 --- a/github/Label.py +++ b/github/Label.py @@ -66,10 +66,7 @@ class Label(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, name, color): @@ -88,9 +85,7 @@ class Label(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/Legacy.py b/github/Legacy.py index a0e3493f..cfe48d67 100644 --- a/github/Legacy.py +++ b/github/Legacy.py @@ -58,9 +58,7 @@ class PaginatedList(github.PaginatedList.PaginatedListBase): headers, data = self.__requester.requestJsonAndCheck( "GET", self.__url, - args, - None, - None + parameters=args ) self.__continue = len(data[self.__key]) > 0 diff --git a/github/MainClass.py b/github/MainClass.py index 676fa914..a4af1a61 100644 --- a/github/MainClass.py +++ b/github/MainClass.py @@ -40,6 +40,8 @@ import github.GithubObject import HookDescription import GitignoreTemplate import Notification +import Status +import StatusMessage DEFAULT_BASE_URL = "https://api.github.com" @@ -109,10 +111,7 @@ class Github(object): if limit < 0: self.__requester.requestJsonAndCheck( 'GET', - '/rate_limit', - None, - None, - None + '/rate_limit' ) return self.__requester.rate_limiting @@ -125,10 +124,7 @@ class Github(object): if self.__requester.rate_limiting_resettime == 0: self.__requester.requestJsonAndCheck( 'GET', - '/rate_limit', - None, - None, - None + '/rate_limit' ) return self.__requester.rate_limiting_resettime @@ -151,10 +147,7 @@ class Github(object): else: headers, data = self.__requester.requestJsonAndCheck( "GET", - "/users/" + login, - None, - None, - None + "/users/" + login ) return github.NamedUser.NamedUser(self.__requester, headers, data, completed=True) @@ -184,10 +177,7 @@ class Github(object): assert isinstance(login, (str, unicode)), login headers, data = self.__requester.requestJsonAndCheck( "GET", - "/orgs/" + login, - None, - None, - None + "/orgs/" + login ) return github.Organization.Organization(self.__requester, headers, data, completed=True) @@ -199,10 +189,7 @@ class Github(object): assert isinstance(full_name, (str, unicode)), full_name headers, data = self.__requester.requestJsonAndCheck( "GET", - "/repos/" + full_name, - None, - None, - None + "/repos/" + full_name ) return Repository.Repository(self.__requester, headers, data, completed=True) @@ -232,10 +219,7 @@ class Github(object): assert isinstance(id, (str, unicode)), id headers, data = self.__requester.requestJsonAndCheck( "GET", - "/gists/" + id, - None, - None, - None + "/gists/" + id ) return github.Gist.Gist(self.__requester, headers, data, completed=True) @@ -295,10 +279,7 @@ class Github(object): assert isinstance(email, (str, unicode)), email headers, data = self.__requester.requestJsonAndCheck( "GET", - "/legacy/user/email/" + email, - None, - None, - None + "/legacy/user/email/" + email ) return github.NamedUser.NamedUser(self.__requester, headers, Legacy.convertUser(data["user"]), completed=False) @@ -320,9 +301,7 @@ class Github(object): status, headers, data = self.__requester.requestJson( "POST", "/markdown", - None, - None, - post_parameters + input=post_parameters ) return data @@ -333,10 +312,7 @@ class Github(object): """ headers, data = self.__requester.requestJsonAndCheck( "GET", - "/hooks", - None, - None, - None + "/hooks" ) return [HookDescription.HookDescription(self.__requester, headers, attributes, completed=True) for attributes in data] @@ -347,10 +323,7 @@ class Github(object): """ headers, data = self.__requester.requestJsonAndCheck( "GET", - "/gitignore/templates", - None, - None, - None + "/gitignore/templates" ) return data @@ -362,10 +335,7 @@ class Github(object): assert isinstance(name, (str, unicode)), name headers, attributes = self.__requester.requestJsonAndCheck( "GET", - "/gitignore/templates/" + name, - None, - None, - None + "/gitignore/templates/" + name ) return GitignoreTemplate.GitignoreTemplate(self.__requester, headers, attributes, completed=True) @@ -401,3 +371,45 @@ class Github(object): :return: the unpickled object """ return self.create_from_raw_data(*pickle.load(f)) + + def get_api_status(self): + """ + This doesn't work with a Github Enterprise installation, because it always targets https://status.github.com. + + :calls: `GET /api/status.json `_ + :rtype: :class:`github.Status.Status` + """ + headers, attributes = self.__requester.requestJsonAndCheck( + "GET", + "/api/status.json", + cnx="status" + ) + return Status.Status(self.__requester, headers, attributes, completed=True) + + def get_last_api_status_message(self): + """ + This doesn't work with a Github Enterprise installation, because it always targets https://status.github.com. + + :calls: `GET /api/last-message.json `_ + :rtype: :class:`github.StatusMessage.StatusMessage` + """ + headers, attributes = self.__requester.requestJsonAndCheck( + "GET", + "/api/last-message.json", + cnx="status" + ) + return StatusMessage.StatusMessage(self.__requester, headers, attributes, completed=True) + + def get_api_status_messages(self): + """ + This doesn't work with a Github Enterprise installation, because it always targets https://status.github.com. + + :calls: `GET /api/messages.json `_ + :rtype: list of :class:`github.StatusMessage.StatusMessage` + """ + headers, data = self.__requester.requestJsonAndCheck( + "GET", + "/api/messages.json", + cnx="status" + ) + return [StatusMessage.StatusMessage(self.__requester, headers, attributes, completed=True) for attributes in data] diff --git a/github/Milestone.py b/github/Milestone.py index 0f23eb78..c07ec389 100644 --- a/github/Milestone.py +++ b/github/Milestone.py @@ -134,10 +134,7 @@ class Milestone(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, title, state=github.GithubObject.NotSet, description=github.GithubObject.NotSet, due_on=github.GithubObject.NotSet): @@ -165,9 +162,7 @@ class Milestone(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/NamedUser.py b/github/NamedUser.py index 435b1bf2..ec9bfbed 100644 --- a/github/NamedUser.py +++ b/github/NamedUser.py @@ -269,9 +269,7 @@ class NamedUser(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/gists", - None, - None, - post_parameters + input=post_parameters ) return github.Gist.Gist(self._requester, headers, data, completed=True) @@ -392,10 +390,7 @@ class NamedUser(github.GithubObject.CompletableGithubObject): assert isinstance(name, (str, unicode)), name headers, data = self._requester.requestJsonAndCheck( "GET", - "/repos/" + self.login + "/" + name, - None, - None, - None + "/repos/" + self.login + "/" + name ) return github.Repository.Repository(self._requester, headers, data, completed=True) @@ -461,10 +456,7 @@ class NamedUser(github.GithubObject.CompletableGithubObject): assert isinstance(following, github.NamedUser.NamedUser), following status, headers, data = self._requester.requestJson( "GET", - self.url + "/following/" + following._identity, - None, - None, - None + self.url + "/following/" + following._identity ) return status == 204 diff --git a/github/Organization.py b/github/Organization.py index aa904fce..68245f3e 100644 --- a/github/Organization.py +++ b/github/Organization.py @@ -244,10 +244,7 @@ class Organization(github.GithubObject.CompletableGithubObject): assert isinstance(public_member, github.NamedUser.NamedUser), public_member headers, data = self._requester.requestJsonAndCheck( "PUT", - self.url + "/public_members/" + public_member._identity, - None, - None, - None + self.url + "/public_members/" + public_member._identity ) def create_fork(self, repo): @@ -263,9 +260,7 @@ class Organization(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", "/repos/" + repo.owner.login + "/" + repo.name + "/forks", - url_parameters, - None, - None + parameters=url_parameters ) return github.Repository.Repository(self._requester, headers, data, completed=True) @@ -318,9 +313,7 @@ class Organization(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/repos", - None, - None, - post_parameters + input=post_parameters ) return github.Repository.Repository(self._requester, headers, data, completed=True) @@ -345,9 +338,7 @@ class Organization(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/teams", - None, - None, - post_parameters + input=post_parameters ) return github.Team.Team(self._requester, headers, data, completed=True) @@ -384,9 +375,7 @@ class Organization(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) @@ -473,10 +462,7 @@ class Organization(github.GithubObject.CompletableGithubObject): assert isinstance(name, (str, unicode)), name headers, data = self._requester.requestJsonAndCheck( "GET", - "/repos/" + self.login + "/" + name, - None, - None, - None + "/repos/" + self.login + "/" + name ) return github.Repository.Repository(self._requester, headers, data, completed=True) @@ -506,10 +492,7 @@ class Organization(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - "/teams/" + str(id), - None, - None, - None + "/teams/" + str(id) ) return github.Team.Team(self._requester, headers, data, completed=True) @@ -534,10 +517,7 @@ class Organization(github.GithubObject.CompletableGithubObject): assert isinstance(member, github.NamedUser.NamedUser), member status, headers, data = self._requester.requestJson( "GET", - self.url + "/members/" + member._identity, - None, - None, - None + self.url + "/members/" + member._identity ) return status == 204 @@ -550,10 +530,7 @@ class Organization(github.GithubObject.CompletableGithubObject): assert isinstance(public_member, github.NamedUser.NamedUser), public_member status, headers, data = self._requester.requestJson( "GET", - self.url + "/public_members/" + public_member._identity, - None, - None, - None + self.url + "/public_members/" + public_member._identity ) return status == 204 @@ -566,10 +543,7 @@ class Organization(github.GithubObject.CompletableGithubObject): assert isinstance(member, github.NamedUser.NamedUser), member headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url + "/members/" + member._identity, - None, - None, - None + self.url + "/members/" + member._identity ) def remove_from_public_members(self, public_member): @@ -581,10 +555,7 @@ class Organization(github.GithubObject.CompletableGithubObject): assert isinstance(public_member, github.NamedUser.NamedUser), public_member headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url + "/public_members/" + public_member._identity, - None, - None, - None + self.url + "/public_members/" + public_member._identity ) def _initAttributes(self): diff --git a/github/PaginatedList.py b/github/PaginatedList.py index 45b2546d..4c22b991 100644 --- a/github/PaginatedList.py +++ b/github/PaginatedList.py @@ -122,9 +122,7 @@ class PaginatedList(PaginatedListBase): headers, data = self.__requester.requestJsonAndCheck( "GET", self.__firstUrl, - self.__nextParams, - None, - None + parameters=self.__nextParams ) links = self.__parseLinkHeader(headers) lastUrl = links.get("last") @@ -149,9 +147,7 @@ class PaginatedList(PaginatedListBase): headers, data = self.__requester.requestJsonAndCheck( "GET", self.__nextUrl, - self.__nextParams, - None, - None + parameters=self.__nextParams ) self.__nextUrl = None @@ -192,9 +188,7 @@ class PaginatedList(PaginatedListBase): headers, data = self.__requester.requestJsonAndCheck( "GET", self.__firstUrl, - params, - None, - None + parameters=params ) return [ diff --git a/github/PullRequest.py b/github/PullRequest.py index 2b9b022b..85867c60 100644 --- a/github/PullRequest.py +++ b/github/PullRequest.py @@ -292,9 +292,7 @@ class PullRequest(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/comments", - None, - None, - post_parameters + input=post_parameters ) return github.PullRequestComment.PullRequestComment(self._requester, headers, data, completed=True) @@ -311,9 +309,7 @@ class PullRequest(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self._parentUrl(self._parentUrl(self.url)) + "/issues/" + str(self.number) + "/comments", - None, - None, - post_parameters + input=post_parameters ) return github.IssueComment.IssueComment(self._requester, headers, data, completed=True) @@ -338,9 +334,7 @@ class PullRequest(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) @@ -361,10 +355,7 @@ class PullRequest(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - self._parentUrl(self.url) + "/comments/" + str(id), - None, - None, - None + self._parentUrl(self.url) + "/comments/" + str(id) ) return github.PullRequestComment.PullRequestComment(self._requester, headers, data, completed=True) @@ -420,10 +411,7 @@ class PullRequest(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - self._parentUrl(self._parentUrl(self.url)) + "/issues/comments/" + str(id), - None, - None, - None + self._parentUrl(self._parentUrl(self.url)) + "/issues/comments/" + str(id) ) return github.IssueComment.IssueComment(self._requester, headers, data, completed=True) @@ -446,10 +434,7 @@ class PullRequest(github.GithubObject.CompletableGithubObject): """ status, headers, data = self._requester.requestJson( "GET", - self.url + "/merge", - None, - None, - None + self.url + "/merge" ) return status == 204 @@ -466,9 +451,7 @@ class PullRequest(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PUT", self.url + "/merge", - None, - None, - post_parameters + input=post_parameters ) return github.PullRequestMergeStatus.PullRequestMergeStatus(self._requester, headers, data, completed=True) diff --git a/github/PullRequestComment.py b/github/PullRequestComment.py index 4d250d56..1e96426e 100644 --- a/github/PullRequestComment.py +++ b/github/PullRequestComment.py @@ -139,10 +139,7 @@ class PullRequestComment(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, body): @@ -158,9 +155,7 @@ class PullRequestComment(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/Repository.py b/github/Repository.py index 9a62e13d..7eb3d235 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -317,10 +317,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(collaborator, github.NamedUser.NamedUser), collaborator headers, data = self._requester.requestJsonAndCheck( "PUT", - self.url + "/collaborators/" + collaborator._identity, - None, - None, - None + self.url + "/collaborators/" + collaborator._identity ) def compare(self, base, head): @@ -334,10 +331,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(head, (str, unicode)), head headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/compare/" + base + "..." + head, - None, - None, - None + self.url + "/compare/" + base + "..." + head ) return github.Comparison.Comparison(self._requester, headers, data, completed=True) @@ -365,9 +359,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/downloads", - None, - None, - post_parameters + input=post_parameters ) return github.Download.Download(self._requester, headers, data, completed=True) @@ -387,9 +379,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/git/blobs", - None, - None, - post_parameters + input=post_parameters ) return github.GitBlob.GitBlob(self._requester, headers, data, completed=True) @@ -420,9 +410,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/git/commits", - None, - None, - post_parameters + input=post_parameters ) return github.GitCommit.GitCommit(self._requester, headers, data, completed=True) @@ -442,9 +430,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/git/refs", - None, - None, - post_parameters + input=post_parameters ) return github.GitRef.GitRef(self._requester, headers, data, completed=True) @@ -474,9 +460,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/git/tags", - None, - None, - post_parameters + input=post_parameters ) return github.GitTag.GitTag(self._requester, headers, data, completed=True) @@ -497,9 +481,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/git/trees", - None, - None, - post_parameters + input=post_parameters ) return github.GitTree.GitTree(self._requester, headers, data, completed=True) @@ -527,9 +509,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/hooks", - None, - None, - post_parameters + input=post_parameters ) return github.Hook.Hook(self._requester, headers, data, completed=True) @@ -562,9 +542,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/issues", - None, - None, - post_parameters + input=post_parameters ) return github.Issue.Issue(self._requester, headers, data, completed=True) @@ -584,9 +562,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/keys", - None, - None, - post_parameters + input=post_parameters ) return github.RepositoryKey.RepositoryKey(self._requester, headers, data, completed=True, repoUrl=self._url) @@ -606,9 +582,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/labels", - None, - None, - post_parameters + input=post_parameters ) return github.Label.Label(self._requester, headers, data, completed=True) @@ -637,9 +611,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/milestones", - None, - None, - post_parameters + input=post_parameters ) return github.Milestone.Milestone(self._requester, headers, data, completed=True) @@ -676,9 +648,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/pulls", - None, - None, - post_parameters + input=post_parameters ) return github.PullRequest.PullRequest(self._requester, headers, data, completed=True) @@ -689,10 +659,7 @@ class Repository(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, name, description=github.GithubObject.NotSet, homepage=github.GithubObject.NotSet, public=github.GithubObject.NotSet, has_issues=github.GithubObject.NotSet, has_wiki=github.GithubObject.NotSet, has_downloads=github.GithubObject.NotSet, default_branch=github.GithubObject.NotSet): @@ -736,9 +703,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) @@ -756,10 +721,7 @@ class Repository(github.GithubObject.CompletableGithubObject): url += "/" + ref headers, data = self._requester.requestJsonAndCheck( "GET", - url, - None, - None, - None + url ) return headers["location"] @@ -784,10 +746,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(branch, (str, unicode)), branch headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/branches/" + branch, - None, - None, - None + self.url + "/branches/" + branch ) return github.Branch.Branch(self._requester, headers, data, completed=True) @@ -824,10 +783,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/comments/" + str(id), - None, - None, - None + self.url + "/comments/" + str(id) ) return github.CommitComment.CommitComment(self._requester, headers, data, completed=True) @@ -852,10 +808,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(sha, (str, unicode)), sha headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/commits/" + sha, - None, - None, - None + self.url + "/commits/" + sha ) return github.Commit.Commit(self._requester, headers, data, completed=True) @@ -912,9 +865,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "GET", self.url + "/contents" + path, - url_parameters, - None, - None + parameters=url_parameters ) return github.ContentFile.ContentFile(self._requester, headers, data, completed=True) @@ -933,9 +884,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "GET", self.url + "/contents" + path, - url_parameters, - None, - None + parameters=url_parameters ) # Handle 302 redirect response @@ -943,9 +892,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "GET", headers['location'], - url_parameters, - None, - None + parameters=url_parameters ) return [ @@ -974,10 +921,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/downloads/" + str(id), - None, - None, - None + self.url + "/downloads/" + str(id) ) return github.Download.Download(self._requester, headers, data, completed=True) @@ -1026,10 +970,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(sha, (str, unicode)), sha headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/git/blobs/" + sha, - None, - None, - None + self.url + "/git/blobs/" + sha ) return github.GitBlob.GitBlob(self._requester, headers, data, completed=True) @@ -1042,10 +983,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(sha, (str, unicode)), sha headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/git/commits/" + sha, - None, - None, - None + self.url + "/git/commits/" + sha ) return github.GitCommit.GitCommit(self._requester, headers, data, completed=True) @@ -1061,10 +999,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(ref, (str, unicode)), ref headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + prefix + ref, - None, - None, - None + self.url + prefix + ref ) return github.GitRef.GitRef(self._requester, headers, data, completed=True) @@ -1089,10 +1024,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(sha, (str, unicode)), sha headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/git/tags/" + sha, - None, - None, - None + self.url + "/git/tags/" + sha ) return github.GitTag.GitTag(self._requester, headers, data, completed=True) @@ -1111,9 +1043,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "GET", self.url + "/git/trees/" + sha, - url_parameters, - None, - None + parameters=url_parameters ) return github.GitTree.GitTree(self._requester, headers, data, completed=True) @@ -1126,10 +1056,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/hooks/" + str(id), - None, - None, - None + self.url + "/hooks/" + str(id) ) return github.Hook.Hook(self._requester, headers, data, completed=True) @@ -1154,10 +1081,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(number, (int, long)), number headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/issues/" + str(number), - None, - None, - None + self.url + "/issues/" + str(number) ) return github.Issue.Issue(self._requester, headers, data, completed=True) @@ -1246,10 +1170,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/issues/events/" + str(id), - None, - None, - None + self.url + "/issues/events/" + str(id) ) return github.IssueEvent.IssueEvent(self._requester, headers, data, completed=True) @@ -1274,10 +1195,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(id, (int, long)), id headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/keys/" + str(id), - None, - None, - None + self.url + "/keys/" + str(id) ) return github.RepositoryKey.RepositoryKey(self._requester, headers, data, completed=True, repoUrl=self._url) @@ -1302,10 +1220,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(name, (str, unicode)), name headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/labels/" + urllib.quote(name), - None, - None, - None + self.url + "/labels/" + urllib.quote(name) ) return github.Label.Label(self._requester, headers, data, completed=True) @@ -1328,10 +1243,7 @@ class Repository(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/languages", - None, - None, - None + self.url + "/languages" ) return data @@ -1344,10 +1256,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(number, (int, long)), number headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/milestones/" + str(number), - None, - None, - None + self.url + "/milestones/" + str(number) ) return github.Milestone.Milestone(self._requester, headers, data, completed=True) @@ -1397,10 +1306,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(number, (int, long)), number headers, data = self._requester.requestJsonAndCheck( "GET", - self.url + "/pulls/" + str(number), - None, - None, - None + self.url + "/pulls/" + str(number) ) return github.PullRequest.PullRequest(self._requester, headers, data, completed=True) @@ -1469,9 +1375,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "GET", self.url + "/readme", - url_parameters, - None, - None + parameters=url_parameters ) return github.ContentFile.ContentFile(self._requester, headers, data, completed=True) @@ -1544,10 +1448,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(assignee, github.NamedUser.NamedUser), assignee status, headers, data = self._requester.requestJson( "GET", - self.url + "/assignees/" + assignee._identity, - None, - None, - None + self.url + "/assignees/" + assignee._identity ) return status == 204 @@ -1560,10 +1461,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(collaborator, github.NamedUser.NamedUser), collaborator status, headers, data = self._requester.requestJson( "GET", - self.url + "/collaborators/" + collaborator._identity, - None, - None, - None + self.url + "/collaborators/" + collaborator._identity ) return status == 204 @@ -1578,10 +1476,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(keyword, (str, unicode)), keyword headers, data = self._requester.requestJsonAndCheck( "GET", - "/legacy/issues/search/" + self.owner.login + "/" + self.name + "/" + state + "/" + urllib.quote(keyword), - None, - None, - None + "/legacy/issues/search/" + self.owner.login + "/" + self.name + "/" + state + "/" + urllib.quote(keyword) ) return [ github.Issue.Issue(self._requester, headers, github.Legacy.convertIssue(element), completed=False) @@ -1608,9 +1503,7 @@ class Repository(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "POST", self.url + "/merges", - None, - None, - post_parameters + input=post_parameters ) if data is None: return None @@ -1626,10 +1519,7 @@ class Repository(github.GithubObject.CompletableGithubObject): assert isinstance(collaborator, github.NamedUser.NamedUser), collaborator headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url + "/collaborators/" + collaborator._identity, - None, - None, - None + self.url + "/collaborators/" + collaborator._identity ) def subscribe_to_hub(self, event, callback, secret=github.GithubObject.NotSet): @@ -1669,9 +1559,7 @@ class Repository(github.GithubObject.CompletableGithubObject): responseHeaders, output = self._requester.requestMultipartAndCheck( "POST", "/hub", - None, - None, - post_parameters, + input=post_parameters ) @property diff --git a/github/RepositoryKey.py b/github/RepositoryKey.py index 22b59621..69e1c616 100644 --- a/github/RepositoryKey.py +++ b/github/RepositoryKey.py @@ -89,10 +89,7 @@ class RepositoryKey(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.__customUrl, - None, - None, - None + self.__customUrl ) def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet): @@ -112,9 +109,7 @@ class RepositoryKey(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.__customUrl, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/Requester.py b/github/Requester.py index bae74618..836b776e 100644 --- a/github/Requester.py +++ b/github/Requester.py @@ -164,10 +164,10 @@ class Requester: 'See http://developer.github.com/v3/#user-agent-required' self.__userAgent = user_agent - def requestJsonAndCheck(self, verb, url, parameters, headers, input): - return self.__check(*self.requestJson(verb, url, parameters, headers, input)) + def requestJsonAndCheck(self, verb, url, parameters=None, headers=None, input=None, cnx=None): + return self.__check(*self.requestJson(verb, url, parameters, headers, input, cnx)) - def requestMultipartAndCheck(self, verb, url, parameters, headers, input): + def requestMultipartAndCheck(self, verb, url, parameters=None, headers=None, input=None): return self.__check(*self.requestMultipart(verb, url, parameters, headers, input)) def __check(self, status, responseHeaders, output): @@ -200,13 +200,13 @@ class Requester: except ValueError, e: return {'data': data} - def requestJson(self, verb, url, parameters, headers, input): + def requestJson(self, verb, url, parameters=None, headers=None, input=None, cnx=None): def encode(input): return "application/json", json.dumps(input) - return self.__requestEncode(verb, url, parameters, headers, input, encode) + return self.__requestEncode(cnx, verb, url, parameters, headers, input, encode) - def requestMultipart(self, verb, url, parameters, headers, input): + def requestMultipart(self, verb, url, parameters=None, headers=None, input=None): def encode(input): boundary = "----------------------------3c3ba8b523b2" eol = "\r\n" @@ -220,9 +220,9 @@ class Requester: encoded_input += "--" + boundary + "--" + eol return "multipart/form-data; boundary=" + boundary, encoded_input - return self.__requestEncode(verb, url, parameters, headers, input, encode) + return self.__requestEncode(None, verb, url, parameters, headers, input, encode) - def __requestEncode(self, verb, url, parameters, requestHeaders, input, encode): + def __requestEncode(self, cnx, verb, url, parameters, requestHeaders, input, encode): assert verb in ["HEAD", "GET", "POST", "PATCH", "PUT", "DELETE"] if parameters is None: parameters = dict() @@ -241,7 +241,7 @@ class Requester: self.NEW_DEBUG_FRAME(requestHeaders) - status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input) + status, responseHeaders, output = self.__requestRaw(cnx, verb, url, requestHeaders, encoded_input) if "x-ratelimit-remaining" in responseHeaders and "x-ratelimit-limit" in responseHeaders: self.rate_limiting = (int(responseHeaders["x-ratelimit-remaining"]), int(responseHeaders["x-ratelimit-limit"])) @@ -255,8 +255,12 @@ class Requester: return status, responseHeaders, output - def __requestRaw(self, verb, url, requestHeaders, input): - cnx = self.__createConnection() + def __requestRaw(self, cnx, verb, url, requestHeaders, input): + if cnx is None: + cnx = self.__createConnection() + else: + assert cnx == "status" + cnx = self.__httpsConnectionClass("status.github.com", 443) cnx.request( verb, url, @@ -310,7 +314,7 @@ class Requester: kwds["strict"] = True # Useless in Python3, would generate a deprecation warning if atLeastPython26: # pragma no branch (Branch useful only with Python 2.5) kwds["timeout"] = self.__timeout # Did not exist before Python2.6 - return self.__connectionClass(host=self.__hostname, port=self.__port, **kwds) + return self.__connectionClass(self.__hostname, self.__port, **kwds) def __log(self, verb, url, requestHeaders, input, status, responseHeaders, output): logger = logging.getLogger(__name__) diff --git a/github/Status.py b/github/Status.py new file mode 100644 index 00000000..6c117241 --- /dev/null +++ b/github/Status.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +############################ Copyrights and license ############################ +# # +# Copyright 2013 Vincent Jacques # +# # +# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ # +# # +# 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 + + +class Status(github.GithubObject.NonCompletableGithubObject): + """ + This class represents status as defined in https://status.github.com/api + """ + + @property + def status(self): + """ + :type: string + """ + return self._NoneIfNotSet(self._status) + + @property + def last_updated(self): + """ + :type: datetime.datetime + """ + return self._NoneIfNotSet(self._last_updated) + + def _initAttributes(self): + self._status = github.GithubObject.NotSet + self._last_updated = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "status" in attributes: # pragma no branch + assert attributes["status"] is None or isinstance(attributes["status"], (str, unicode)), attributes["status"] + self._status = attributes["status"] + if "last_updated" in attributes: # pragma no branch + assert attributes["last_updated"] is None or isinstance(attributes["last_updated"], (str, unicode)), attributes["last_updated"] + self._last_updated = self._parseDatetime(attributes["last_updated"]) diff --git a/github/StatusMessage.py b/github/StatusMessage.py new file mode 100644 index 00000000..266e1b05 --- /dev/null +++ b/github/StatusMessage.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- + +############################ Copyrights and license ############################ +# # +# Copyright 2013 Vincent Jacques # +# # +# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ # +# # +# 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 + + +class StatusMessage(github.GithubObject.NonCompletableGithubObject): + """ + This class represents status messages as defined in https://status.github.com/api + """ + + @property + def body(self): + """ + :type: string + """ + return self._NoneIfNotSet(self._body) + + @property + def status(self): + """ + :type: string + """ + return self._NoneIfNotSet(self._status) + + @property + def created_on(self): + """ + :type: datetime.datetime + """ + return self._NoneIfNotSet(self._created_on) + + def _initAttributes(self): + self._status = github.GithubObject.NotSet + self._created_on = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "body" in attributes: # pragma no branch + assert attributes["body"] is None or isinstance(attributes["body"], (str, unicode)), attributes["body"] + self._body = attributes["body"] + if "status" in attributes: # pragma no branch + assert attributes["status"] is None or isinstance(attributes["status"], (str, unicode)), attributes["status"] + self._status = attributes["status"] + if "created_on" in attributes: # pragma no branch + assert attributes["created_on"] is None or isinstance(attributes["created_on"], (str, unicode)), attributes["created_on"] + self._created_on = self._parseDatetime(attributes["created_on"]) diff --git a/github/Team.py b/github/Team.py index d8fb7379..9b687d80 100644 --- a/github/Team.py +++ b/github/Team.py @@ -94,10 +94,7 @@ class Team(github.GithubObject.CompletableGithubObject): assert isinstance(member, github.NamedUser.NamedUser), member headers, data = self._requester.requestJsonAndCheck( "PUT", - self.url + "/members/" + member._identity, - None, - None, - None + self.url + "/members/" + member._identity ) def add_to_repos(self, repo): @@ -109,10 +106,7 @@ class Team(github.GithubObject.CompletableGithubObject): assert isinstance(repo, github.Repository.Repository), repo headers, data = self._requester.requestJsonAndCheck( "PUT", - self.url + "/repos/" + repo._identity, - None, - None, - None + self.url + "/repos/" + repo._identity ) def delete(self): @@ -122,10 +116,7 @@ class Team(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, name, permission=github.GithubObject.NotSet): @@ -145,9 +136,7 @@ class Team(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) @@ -184,10 +173,7 @@ class Team(github.GithubObject.CompletableGithubObject): assert isinstance(member, github.NamedUser.NamedUser), member status, headers, data = self._requester.requestJson( "GET", - self.url + "/members/" + member._identity, - None, - None, - None + self.url + "/members/" + member._identity ) return status == 204 @@ -200,10 +186,7 @@ class Team(github.GithubObject.CompletableGithubObject): assert isinstance(repo, github.Repository.Repository), repo status, headers, data = self._requester.requestJson( "GET", - self.url + "/repos/" + repo._identity, - None, - None, - None + self.url + "/repos/" + repo._identity ) return status == 204 @@ -216,10 +199,7 @@ class Team(github.GithubObject.CompletableGithubObject): assert isinstance(member, github.NamedUser.NamedUser), member headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url + "/members/" + member._identity, - None, - None, - None + self.url + "/members/" + member._identity ) def remove_from_repos(self, repo): @@ -231,10 +211,7 @@ class Team(github.GithubObject.CompletableGithubObject): assert isinstance(repo, github.Repository.Repository), repo headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url + "/repos/" + repo._identity, - None, - None, - None + self.url + "/repos/" + repo._identity ) @property diff --git a/github/UserKey.py b/github/UserKey.py index 83a26009..9ca0133b 100644 --- a/github/UserKey.py +++ b/github/UserKey.py @@ -80,10 +80,7 @@ class UserKey(github.GithubObject.CompletableGithubObject): """ headers, data = self._requester.requestJsonAndCheck( "DELETE", - self.url, - None, - None, - None + self.url ) def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet): @@ -103,9 +100,7 @@ class UserKey(github.GithubObject.CompletableGithubObject): headers, data = self._requester.requestJsonAndCheck( "PATCH", self.url, - None, - None, - post_parameters + input=post_parameters ) self._useAttributes(data) diff --git a/github/tests/AllTests.py b/github/tests/AllTests.py index 5c2ce6da..4ddefece 100644 --- a/github/tests/AllTests.py +++ b/github/tests/AllTests.py @@ -56,6 +56,7 @@ from PullRequestFile import * from RateLimiting import * from Repository import * from RepositoryKey import * +from Status import * from Tag import * from Team import * from UserKey import * diff --git a/github/tests/ReplayData/Status.testGetLastMessage.txt b/github/tests/ReplayData/Status.testGetLastMessage.txt new file mode 100644 index 00000000..3d4b27e8 --- /dev/null +++ b/github/tests/ReplayData/Status.testGetLastMessage.txt @@ -0,0 +1,11 @@ +https +GET +status.github.com +443 +/api/last-message.json +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +null +200 +[('status', '200 OK'), ('content-length', '93'), ('vary', 'Accept-Encoding'), ('server', 'GitHub.com'), ('connection', 'keep-alive'), ('date', 'Fri, 06 Sep 2013 08:34:01 GMT'), ('content-type', 'application/json;charset=utf-8')] +{"status":"good","body":"Everything operating normally.","created_on":"2013-09-01T15:41:46Z"} + diff --git a/github/tests/ReplayData/Status.testGetMessages.txt b/github/tests/ReplayData/Status.testGetMessages.txt new file mode 100644 index 00000000..6c79412a --- /dev/null +++ b/github/tests/ReplayData/Status.testGetMessages.txt @@ -0,0 +1,11 @@ +https +GET +status.github.com +443 +/api/messages.json +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +null +200 +[('status', '200 OK'), ('content-length', '1492'), ('vary', 'Accept-Encoding'), ('server', 'GitHub.com'), ('connection', 'keep-alive'), ('date', 'Fri, 06 Sep 2013 08:41:31 GMT'), ('content-type', 'application/json;charset=utf-8')] +[{"status":"good","body":"Everything operating normally.","created_on":"2013-09-01T15:41:46Z"},{"status":"minor","body":"GitHub Pages are currently unavailable. We're investigating the problem.","created_on":"2013-09-01T15:26:59Z"},{"status":"good","body":"Everything operating normally.","created_on":"2013-09-01T15:17:24Z"},{"status":"minor","body":"We are investigating an increased rate of errors on GitHub.com","created_on":"2013-09-01T15:14:24Z"},{"status":"good","body":"Everything operating normally.","created_on":"2013-09-01T06:52:46Z"},{"status":"minor","body":"Some GitHub pages are again unavailable. We are continuing to investigate.","created_on":"2013-09-01T06:50:31Z"},{"status":"good","body":"Everything operating normally.","created_on":"2013-09-01T06:47:25Z"},{"status":"minor","body":"Some GitHub pages are temporarily unavailable.","created_on":"2013-09-01T06:43:03Z"},{"status":"good","body":"We're back up, now featuring a massively upgraded DB cluster with SSDs and 10Gbps networking! Thanks for your patience.","created_on":"2013-08-31T12:13:04Z"},{"status":"major","body":"We're beginning our scheduled maintenance now, and expect to be back up in 20 minutes. https://github.com/blog/1603-site-maintenance-august-31st-2013","created_on":"2013-08-31T12:00:13Z"},{"status":"good","body":"Everything operating normally.","created_on":"2013-08-31T11:45:50Z"},{"status":"minor","body":"We are investigating issues with GitHub Pages","created_on":"2013-08-31T11:43:39Z"}] + diff --git a/github/tests/ReplayData/Status.testGetStatus.txt b/github/tests/ReplayData/Status.testGetStatus.txt new file mode 100644 index 00000000..e01aec02 --- /dev/null +++ b/github/tests/ReplayData/Status.testGetStatus.txt @@ -0,0 +1,11 @@ +https +GET +status.github.com +443 +/api/status.json +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +null +200 +[('status', '200 OK'), ('content-length', '55'), ('vary', 'Accept-Encoding'), ('server', 'GitHub.com'), ('connection', 'keep-alive'), ('date', 'Fri, 06 Sep 2013 08:29:36 GMT'), ('content-type', 'application/json;charset=utf-8')] +{"status":"good","last_updated":"2013-09-06T08:29:27Z"} + diff --git a/github/tests/Status.py b/github/tests/Status.py new file mode 100644 index 00000000..0bb3c935 --- /dev/null +++ b/github/tests/Status.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +############################ Copyrights and license ############################ +# # +# Copyright 2013 Vincent Jacques # +# # +# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ # +# # +# 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 Framework + +import github +import datetime + + +class Status(Framework.TestCase): + def testGetStatus(self): + status = self.g.get_api_status() + self.assertEqual(status.status, "good") + self.assertEqual(status.last_updated, datetime.datetime(2013, 9, 6, 8, 29, 27)) + + def testGetLastMessage(self): + message = self.g.get_last_api_status_message() + self.assertEqual(message.status, "good") + self.assertEqual(message.body, "Everything operating normally.") + self.assertEqual(message.created_on, datetime.datetime(2013, 9, 1, 15, 41, 46)) + + def testGetMessages(self): + self.assertListKeyEqual(self.g.get_api_status_messages(), lambda m: m.status, ["good", "minor", "good", "minor", "good", "minor", "good", "minor", "good", "major", "good", "minor"])