diff --git a/codegen/templates/GithubObject.MethodBody.CheckResult.py b/codegen/templates/GithubObject.MethodBody.CheckResult.py deleted file mode 100644 index bd83db47..00000000 --- a/codegen/templates/GithubObject.MethodBody.CheckResult.py +++ /dev/null @@ -1,3 +0,0 @@ -{% if method.type.name != "bool" %} - self._checkStatus( status, data ) -{% endif %} diff --git a/codegen/templates/GithubObject.MethodBody.DoRequest.py b/codegen/templates/GithubObject.MethodBody.DoRequest.py index ccf3dd23..72d8d189 100644 --- a/codegen/templates/GithubObject.MethodBody.DoRequest.py +++ b/codegen/templates/GithubObject.MethodBody.DoRequest.py @@ -38,7 +38,11 @@ } {% endif %} - status, headers, data = self._request( +{% if method.type.name == "bool" %} + status, headers, data = self._requester.requestRaw( +{% else %} + headers, data = self._requester.requestAndCheck( +{% endif %} "{{ method.request.verb }}", {% include "GithubObject.Concatenation.py" with concatenation=method.request.url only %}, {% if method.request.urlParameters or not method.request.postParameters and method.optionalParameters %} diff --git a/github/AuthenticatedUser.py b/github/AuthenticatedUser.py index 5c987113..16494eaa 100644 --- a/github/AuthenticatedUser.py +++ b/github/AuthenticatedUser.py @@ -146,33 +146,30 @@ class AuthenticatedUser( GithubObject.GithubObject ): def add_to_emails( self, *emails ): assert all( isinstance( element, ( str, unicode ) ) for element in emails ), emails post_parameters = emails - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", "https://api.github.com/user/emails", None, post_parameters ) - self._checkStatus( status, data ) def add_to_following( self, following ): assert isinstance( following, NamedUser.NamedUser ), following - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PUT", "https://api.github.com/user/following/" + following._identity, None, None ) - self._checkStatus( status, data ) def add_to_watched( self, watched ): assert isinstance( watched, Repository.Repository ), watched - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PUT", "https://api.github.com/user/watched/" + watched._identity, None, None ) - self._checkStatus( status, data ) def create_authorization( self, scopes = GithubObject.NotSet, note = GithubObject.NotSet, note_url = GithubObject.NotSet ): assert scopes is GithubObject.NotSet or all( isinstance( element, ( str, unicode ) ) for element in scopes ), scopes @@ -185,24 +182,22 @@ class AuthenticatedUser( GithubObject.GithubObject ): post_parameters[ "note" ] = note if note_url is not GithubObject.NotSet: post_parameters[ "note_url" ] = note_url - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", "https://api.github.com/authorizations", None, post_parameters ) - self._checkStatus( status, data ) return Authorization.Authorization( self._requester, data, completed = True ) def create_fork( self, repo ): assert isinstance( repo, Repository.Repository ), repo - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", "https://api.github.com/repos/" + repo.owner.login + "/" + repo.name + "/forks", None, None ) - self._checkStatus( status, data ) return Repository.Repository( self._requester, data, completed = True ) def create_gist( self, public, files, description = GithubObject.NotSet ): @@ -215,13 +210,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): } if description is not GithubObject.NotSet: post_parameters[ "description" ] = description - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", "https://api.github.com/gists", None, post_parameters ) - self._checkStatus( status, data ) return Gist.Gist( self._requester, data, completed = True ) def create_key( self, title, key ): @@ -231,13 +225,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): "title": title, "key": key, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", "https://api.github.com/user/keys", None, post_parameters ) - self._checkStatus( status, data ) return UserKey.UserKey( self._requester, data, completed = True ) def create_repo( self, name, description = GithubObject.NotSet, homepage = GithubObject.NotSet, private = GithubObject.NotSet, has_issues = GithubObject.NotSet, has_wiki = GithubObject.NotSet, has_downloads = GithubObject.NotSet ): @@ -263,13 +256,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): post_parameters[ "has_wiki" ] = has_wiki if has_downloads is not GithubObject.NotSet: post_parameters[ "has_downloads" ] = has_downloads - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", "https://api.github.com/user/repos", None, post_parameters ) - self._checkStatus( status, data ) return Repository.Repository( self._requester, data, completed = True ) def edit( self, name = GithubObject.NotSet, email = GithubObject.NotSet, blog = GithubObject.NotSet, company = GithubObject.NotSet, location = GithubObject.NotSet, hireable = GithubObject.NotSet, bio = GithubObject.NotSet ): @@ -295,34 +287,31 @@ class AuthenticatedUser( GithubObject.GithubObject ): post_parameters[ "hireable" ] = hireable if bio is not GithubObject.NotSet: post_parameters[ "bio" ] = bio - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", "https://api.github.com/user", None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def get_authorization( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/authorizations/" + str( id ), None, None ) - self._checkStatus( status, data ) return Authorization.Authorization( self._requester, data, completed = True ) def get_authorizations( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/authorizations", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Authorization.Authorization, self._requester, @@ -331,23 +320,21 @@ class AuthenticatedUser( GithubObject.GithubObject ): ) def get_emails( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/user/emails", None, None ) - self._checkStatus( status, data ) return data def get_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/events", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Event.Event, self._requester, @@ -356,13 +343,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): ) def get_followers( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/user/followers", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser.NamedUser, self._requester, @@ -371,13 +357,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): ) def get_following( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/user/following", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser.NamedUser, self._requester, @@ -386,13 +371,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): ) def get_gists( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/gists", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Gist.Gist, self._requester, @@ -401,13 +385,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): ) def get_issues( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/issues", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Issue.Issue, self._requester, @@ -417,23 +400,21 @@ class AuthenticatedUser( GithubObject.GithubObject ): def get_key( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/user/keys/" + str( id ), None, None ) - self._checkStatus( status, data ) return UserKey.UserKey( self._requester, data, completed = True ) def get_keys( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/user/keys", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( UserKey.UserKey, self._requester, @@ -443,13 +424,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): def get_organization_events( self, org ): assert isinstance( org, Organization.Organization ), org - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/users/" + self.login + "/events/orgs/" + org.login, None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Event.Event, self._requester, @@ -458,13 +438,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): ) def get_orgs( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/user/orgs", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Organization.Organization, self._requester, @@ -474,13 +453,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): def get_repo( self, name ): assert isinstance( name, ( str, unicode ) ), name - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/repos/" + self.login + "/" + name, None, None ) - self._checkStatus( status, data ) return Repository.Repository( self._requester, data, completed = True ) def get_repos( self, type = GithubObject.NotSet, sort = GithubObject.NotSet, direction = GithubObject.NotSet ): @@ -494,13 +472,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): url_parameters[ "sort" ] = sort if direction is not GithubObject.NotSet: url_parameters[ "direction" ] = direction - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/user/repos", url_parameters, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Repository.Repository, self._requester, @@ -509,13 +486,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): ) def get_starred_gists( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/gists/starred", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Gist.Gist, self._requester, @@ -524,13 +500,12 @@ class AuthenticatedUser( GithubObject.GithubObject ): ) def get_watched( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/user/watched", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Repository.Repository, self._requester, @@ -540,7 +515,7 @@ class AuthenticatedUser( GithubObject.GithubObject ): def has_in_following( self, following ): assert isinstance( following, NamedUser.NamedUser ), following - status, headers, data = self._request( + status, headers, data = self._requester.requestRaw( "GET", "https://api.github.com/user/following/" + following._identity, None, @@ -550,7 +525,7 @@ class AuthenticatedUser( GithubObject.GithubObject ): def has_in_watched( self, watched ): assert isinstance( watched, Repository.Repository ), watched - status, headers, data = self._request( + status, headers, data = self._requester.requestRaw( "GET", "https://api.github.com/user/watched/" + watched._identity, None, @@ -561,33 +536,30 @@ class AuthenticatedUser( GithubObject.GithubObject ): def remove_from_emails( self, *emails ): assert all( isinstance( element, ( str, unicode ) ) for element in emails ), emails post_parameters = emails - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", "https://api.github.com/user/emails", None, post_parameters ) - self._checkStatus( status, data ) def remove_from_following( self, following ): assert isinstance( following, NamedUser.NamedUser ), following - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", "https://api.github.com/user/following/" + following._identity, None, None ) - self._checkStatus( status, data ) def remove_from_watched( self, watched ): assert isinstance( watched, Repository.Repository ), watched - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", "https://api.github.com/user/watched/" + watched._identity, None, None ) - self._checkStatus( status, data ) def _initAttributes( self ): self._avatar_url = GithubObject.NotSet diff --git a/github/Authorization.py b/github/Authorization.py index 7eacfe15..1e4e4688 100644 --- a/github/Authorization.py +++ b/github/Authorization.py @@ -54,13 +54,12 @@ class Authorization( GithubObject.GithubObject ): return self._NoneIfNotSet( self._url ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, scopes = GithubObject.NotSet, add_scopes = GithubObject.NotSet, remove_scopes = GithubObject.NotSet, note = GithubObject.NotSet, note_url = GithubObject.NotSet ): assert scopes is GithubObject.NotSet or all( isinstance( element, ( str, unicode ) ) for element in scopes ), scopes @@ -79,13 +78,12 @@ class Authorization( GithubObject.GithubObject ): post_parameters[ "note" ] = note if note_url is not GithubObject.NotSet: post_parameters[ "note_url" ] = note_url - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def _initAttributes( self ): diff --git a/github/Commit.py b/github/Commit.py index 2b10c3e6..e144b78b 100644 --- a/github/Commit.py +++ b/github/Commit.py @@ -66,23 +66,21 @@ class Commit( GithubObject.GithubObject ): post_parameters[ "path" ] = path if position is not GithubObject.NotSet: post_parameters[ "position" ] = position - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/comments", None, post_parameters ) - self._checkStatus( status, data ) return CommitComment.CommitComment( self._requester, data, completed = True ) def get_comments( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/comments", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( CommitComment.CommitComment, self._requester, diff --git a/github/CommitComment.py b/github/CommitComment.py index 039e65ed..4b69a44c 100644 --- a/github/CommitComment.py +++ b/github/CommitComment.py @@ -64,26 +64,24 @@ class CommitComment( GithubObject.GithubObject ): return self._NoneIfNotSet( self._user ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, body ): assert isinstance( body, ( str, unicode ) ), body post_parameters = { "body": body, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def _initAttributes( self ): diff --git a/github/Download.py b/github/Download.py index 47e1e5ab..1cec0de2 100644 --- a/github/Download.py +++ b/github/Download.py @@ -107,13 +107,12 @@ class Download( GithubObject.GithubObject ): return self._NoneIfNotSet( self._url ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def _initAttributes( self ): self._accesskeyid = GithubObject.NotSet diff --git a/github/Gist.py b/github/Gist.py index 3d344a9b..9f91920b 100644 --- a/github/Gist.py +++ b/github/Gist.py @@ -94,33 +94,30 @@ class Gist( GithubObject.GithubObject ): post_parameters = { "body": body, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/comments", None, post_parameters ) - self._checkStatus( status, data ) return GistComment.GistComment( self._requester, data, completed = True ) def create_fork( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/fork", None, None ) - self._checkStatus( status, data ) return Gist( self._requester, data, completed = True ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, description = GithubObject.NotSet, files = GithubObject.NotSet ): assert description is GithubObject.NotSet or isinstance( description, ( str, unicode ) ), description @@ -130,34 +127,31 @@ class Gist( GithubObject.GithubObject ): post_parameters[ "description" ] = description if files is not GithubObject.NotSet: post_parameters[ "files" ] = dict( ( key, value._identity ) for key, value in files.iteritems() ) - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def get_comment( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/gists/comments/" + str( id ), None, None ) - self._checkStatus( status, data ) return GistComment.GistComment( self._requester, data, completed = True ) def get_comments( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/comments", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( GistComment.GistComment, self._requester, @@ -166,7 +160,7 @@ class Gist( GithubObject.GithubObject ): ) def is_starred( self ): - status, headers, data = self._request( + status, headers, data = self._requester.requestRaw( "GET", self.url + "/star", None, @@ -175,22 +169,20 @@ class Gist( GithubObject.GithubObject ): return status == 204 def reset_starred( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url + "/star", None, None ) - self._checkStatus( status, data ) def set_starred( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PUT", self.url + "/star", None, None ) - self._checkStatus( status, data ) def _initAttributes( self ): self._comments = GithubObject.NotSet diff --git a/github/GistComment.py b/github/GistComment.py index 1acd523a..57e9a202 100644 --- a/github/GistComment.py +++ b/github/GistComment.py @@ -39,26 +39,24 @@ class GistComment( GithubObject.GithubObject ): return self._NoneIfNotSet( self._user ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, body ): assert isinstance( body, ( str, unicode ) ), body post_parameters = { "body": body, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def _initAttributes( self ): diff --git a/github/GitRef.py b/github/GitRef.py index 767b1549..249fd440 100644 --- a/github/GitRef.py +++ b/github/GitRef.py @@ -22,13 +22,12 @@ class GitRef( GithubObject.GithubObject ): return self._NoneIfNotSet( self._url ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, sha, force = GithubObject.NotSet ): assert isinstance( sha, ( str, unicode ) ), sha @@ -38,13 +37,12 @@ class GitRef( GithubObject.GithubObject ): } if force is not GithubObject.NotSet: post_parameters[ "force" ] = force - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def _initAttributes( self ): diff --git a/github/Github.py b/github/Github.py index f6d4acf4..a363c973 100644 --- a/github/Github.py +++ b/github/Github.py @@ -17,38 +17,34 @@ class Github( object ): if login is None: return AuthenticatedUser.AuthenticatedUser( self.__requester, { "url": "https://api.github.com/user" }, completed = False ) else: - status, headers, data = self.__requester.request( + headers, data = self.__requester.requestAndCheck( "GET", "https://api.github.com/users/" + login, None, None ) - NamedUser.NamedUser._checkStatus( status, data ) return NamedUser.NamedUser( self.__requester, data, completed = True ) def get_organization( self, login ): - status, headers, data = self.__requester.request( + headers, data = self.__requester.requestAndCheck( "GET", "https://api.github.com/orgs/" + login, None, None ) - Organization.Organization._checkStatus( status, data ) return Organization.Organization( self.__requester, data, completed = True ) def get_gist( self, id ): - status, headers, data = self.__requester.request( + headers, data = self.__requester.requestAndCheck( "GET", "https://api.github.com/gists/" + str( id ), None, None ) - Gist.Gist._checkStatus( status, data ) return Gist.Gist( self.__requester, data, completed = True ) def get_gists( self ): - status, headers, data = self.__requester.request( "GET", "https://api.github.com/gists/public", None, None ) - Gist.Gist._checkStatus( status, data ) + headers, data = self.__requester.requestAndCheck( "GET", "https://api.github.com/gists/public", None, None ) return PaginatedList.PaginatedList( Gist.Gist, self.__requester, diff --git a/github/GithubObject.py b/github/GithubObject.py index fe772774..7ed4d476 100644 --- a/github/GithubObject.py +++ b/github/GithubObject.py @@ -10,18 +10,10 @@ class BasicGithubObject( object ): self._initAttributes() self._useAttributes( attributes ) - def _request( self, verb, url, parameters, input ): - return self._requester.request( verb, url, parameters, input ) - @staticmethod def _parentUrl( url ): return "/".join( url.split( "/" )[ : -1 ] ) - @staticmethod - def _checkStatus( status, data ): - if status >= 400: - raise GithubException.GithubException( status, data ) - @staticmethod def _NoneIfNotSet( value ): if value is NotSet: @@ -39,12 +31,11 @@ class GithubObject( BasicGithubObject ): self.__complete() def __complete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self._url, None, None ) - self._checkStatus( status, data ) self._useAttributes( data ) self._completed = True diff --git a/github/Hook.py b/github/Hook.py index b0d63de6..a5648dc8 100644 --- a/github/Hook.py +++ b/github/Hook.py @@ -54,13 +54,12 @@ class Hook( GithubObject.GithubObject ): return self._NoneIfNotSet( self._url ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, name, config, events = GithubObject.NotSet, add_events = GithubObject.NotSet, remove_events = GithubObject.NotSet, active = GithubObject.NotSet ): assert isinstance( name, ( str, unicode ) ), name @@ -81,23 +80,21 @@ class Hook( GithubObject.GithubObject ): post_parameters[ "remove_events" ] = remove_events if active is not GithubObject.NotSet: post_parameters[ "active" ] = active - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def test( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/test", None, None ) - self._checkStatus( status, data ) def _initAttributes( self ): self._active = GithubObject.NotSet diff --git a/github/Issue.py b/github/Issue.py index 72578b96..c5071bb3 100644 --- a/github/Issue.py +++ b/github/Issue.py @@ -108,36 +108,33 @@ class Issue( GithubObject.GithubObject ): def add_to_labels( self, *labels ): assert all( isinstance( element, Label.Label ) for element in labels ), labels post_parameters = [ label._identity for label in labels ] - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/labels", None, post_parameters ) - self._checkStatus( status, data ) def create_comment( self, body ): assert isinstance( body, ( str, unicode ) ), body post_parameters = { "body": body, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/comments", None, post_parameters ) - self._checkStatus( status, data ) return IssueComment.IssueComment( self._requester, data, completed = True ) def delete_labels( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url + "/labels", None, None ) - self._checkStatus( status, data ) def edit( self, title = GithubObject.NotSet, body = GithubObject.NotSet, assignee = GithubObject.NotSet, state = GithubObject.NotSet, milestone = GithubObject.NotSet, labels = GithubObject.NotSet ): assert title is GithubObject.NotSet or isinstance( title, ( str, unicode ) ), title @@ -159,34 +156,31 @@ class Issue( GithubObject.GithubObject ): post_parameters[ "milestone" ] = milestone._identity if labels is not GithubObject.NotSet: post_parameters[ "labels" ] = labels - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def get_comment( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self._parentUrl( self.url ) + "/comments/" + str( id ), None, None ) - self._checkStatus( status, data ) return IssueComment.IssueComment( self._requester, data, completed = True ) def get_comments( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/comments", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( IssueComment.IssueComment, self._requester, @@ -195,13 +189,12 @@ class Issue( GithubObject.GithubObject ): ) def get_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/events", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( IssueEvent.IssueEvent, self._requester, @@ -210,13 +203,12 @@ class Issue( GithubObject.GithubObject ): ) def get_labels( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/labels", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Label.Label, self._requester, @@ -226,24 +218,22 @@ class Issue( GithubObject.GithubObject ): def remove_from_labels( self, label ): assert isinstance( label, Label.Label ), label - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url + "/labels/" + label._identity, None, None ) - self._checkStatus( status, data ) def set_labels( self, *labels ): assert all( isinstance( element, Label.Label ) for element in labels ), labels post_parameters = [ label._identity for label in labels ] - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PUT", self.url + "/labels", None, post_parameters ) - self._checkStatus( status, data ) @property def _identity( self ): diff --git a/github/IssueComment.py b/github/IssueComment.py index 4b0973a2..0a9ecebb 100644 --- a/github/IssueComment.py +++ b/github/IssueComment.py @@ -39,26 +39,24 @@ class IssueComment( GithubObject.GithubObject ): return self._NoneIfNotSet( self._user ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, body ): assert isinstance( body, ( str, unicode ) ), body post_parameters = { "body": body, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def _initAttributes( self ): diff --git a/github/Label.py b/github/Label.py index 438ed31a..b5d3128e 100644 --- a/github/Label.py +++ b/github/Label.py @@ -22,13 +22,12 @@ class Label( GithubObject.GithubObject ): return self._NoneIfNotSet( self._url ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, name, color ): assert isinstance( name, ( str, unicode ) ), name @@ -37,13 +36,12 @@ class Label( GithubObject.GithubObject ): "name": name, "color": color, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) @property diff --git a/github/Milestone.py b/github/Milestone.py index ed8eb8cc..6484dc97 100644 --- a/github/Milestone.py +++ b/github/Milestone.py @@ -66,13 +66,12 @@ class Milestone( GithubObject.GithubObject ): return self._NoneIfNotSet( self._url ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, title, state = GithubObject.NotSet, description = GithubObject.NotSet, due_on = GithubObject.NotSet ): assert isinstance( title, ( str, unicode ) ), title @@ -88,23 +87,21 @@ class Milestone( GithubObject.GithubObject ): post_parameters[ "description" ] = description if due_on is not GithubObject.NotSet: post_parameters[ "due_on" ] = due_on.strftime( "%Y-%m-%d" ) - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def get_labels( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/labels", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Label.Label, self._requester, diff --git a/github/NamedUser.py b/github/NamedUser.py index b31159ef..0ebeb12b 100644 --- a/github/NamedUser.py +++ b/github/NamedUser.py @@ -155,23 +155,21 @@ class NamedUser( GithubObject.GithubObject ): } if description is not GithubObject.NotSet: post_parameters[ "description" ] = description - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/gists", None, post_parameters ) - self._checkStatus( status, data ) return Gist.Gist( self._requester, data, completed = True ) def get_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/events", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Event.Event, self._requester, @@ -180,13 +178,12 @@ class NamedUser( GithubObject.GithubObject ): ) def get_followers( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/followers", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser, self._requester, @@ -195,13 +192,12 @@ class NamedUser( GithubObject.GithubObject ): ) def get_following( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/following", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser, self._requester, @@ -210,13 +206,12 @@ class NamedUser( GithubObject.GithubObject ): ) def get_gists( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/gists", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Gist.Gist, self._requester, @@ -225,13 +220,12 @@ class NamedUser( GithubObject.GithubObject ): ) def get_orgs( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/orgs", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Organization.Organization, self._requester, @@ -240,13 +234,12 @@ class NamedUser( GithubObject.GithubObject ): ) def get_public_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/events/public", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Event.Event, self._requester, @@ -255,13 +248,12 @@ class NamedUser( GithubObject.GithubObject ): ) def get_public_received_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/received_events/public", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Event.Event, self._requester, @@ -270,13 +262,12 @@ class NamedUser( GithubObject.GithubObject ): ) def get_received_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/received_events", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Event.Event, self._requester, @@ -286,13 +277,12 @@ class NamedUser( GithubObject.GithubObject ): def get_repo( self, name ): assert isinstance( name, ( str, unicode ) ), name - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/repos/" + self.login + "/" + name, None, None ) - self._checkStatus( status, data ) return Repository.Repository( self._requester, data, completed = True ) def get_repos( self, type = GithubObject.NotSet ): @@ -300,13 +290,12 @@ class NamedUser( GithubObject.GithubObject ): url_parameters = dict() if type is not GithubObject.NotSet: url_parameters[ "type" ] = type - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/repos", url_parameters, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Repository.Repository, self._requester, @@ -315,13 +304,12 @@ class NamedUser( GithubObject.GithubObject ): ) def get_watched( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/watched", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Repository.Repository, self._requester, diff --git a/github/Organization.py b/github/Organization.py index 0bf2fd3b..e6386fae 100644 --- a/github/Organization.py +++ b/github/Organization.py @@ -6,8 +6,8 @@ import datetime import GithubObject import PaginatedList ########## -import Team import Plan +import Team import Event import Repository import NamedUser @@ -135,26 +135,24 @@ class Organization( GithubObject.GithubObject ): def add_to_public_members( self, public_member ): assert isinstance( public_member, NamedUser.NamedUser ), public_member - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PUT", self.url + "/public_members/" + public_member._identity, None, None ) - self._checkStatus( status, data ) def create_fork( self, repo ): assert isinstance( repo, Repository.Repository ), repo url_parameters = { "org": self.login, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", "https://api.github.com/repos/" + repo.owner.login + "/" + repo.name + "/forks", url_parameters, None ) - self._checkStatus( status, data ) return Repository.Repository( self._requester, data, completed = True ) def create_repo( self, name, description = GithubObject.NotSet, homepage = GithubObject.NotSet, private = GithubObject.NotSet, has_issues = GithubObject.NotSet, has_wiki = GithubObject.NotSet, has_downloads = GithubObject.NotSet, team_id = GithubObject.NotSet ): @@ -183,13 +181,12 @@ class Organization( GithubObject.GithubObject ): post_parameters[ "has_downloads" ] = has_downloads if team_id is not GithubObject.NotSet: post_parameters[ "team_id" ] = team_id._identity - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/repos", None, post_parameters ) - self._checkStatus( status, data ) return Repository.Repository( self._requester, data, completed = True ) def create_team( self, name, repo_names = GithubObject.NotSet, permission = GithubObject.NotSet ): @@ -203,13 +200,12 @@ class Organization( GithubObject.GithubObject ): post_parameters[ "repo_names" ] = [ element._identity for element in repo_names ] if permission is not GithubObject.NotSet: post_parameters[ "permission" ] = permission - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/teams", None, post_parameters ) - self._checkStatus( status, data ) return Team.Team( self._requester, data, completed = True ) def edit( self, billing_email = GithubObject.NotSet, blog = GithubObject.NotSet, company = GithubObject.NotSet, email = GithubObject.NotSet, location = GithubObject.NotSet, name = GithubObject.NotSet ): @@ -232,23 +228,21 @@ class Organization( GithubObject.GithubObject ): post_parameters[ "location" ] = location if name is not GithubObject.NotSet: post_parameters[ "name" ] = name - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def get_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/events", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Event.Event, self._requester, @@ -257,13 +251,12 @@ class Organization( GithubObject.GithubObject ): ) def get_members( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/members", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser.NamedUser, self._requester, @@ -272,13 +265,12 @@ class Organization( GithubObject.GithubObject ): ) def get_public_members( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/public_members", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser.NamedUser, self._requester, @@ -288,13 +280,12 @@ class Organization( GithubObject.GithubObject ): def get_repo( self, name ): assert isinstance( name, ( str, unicode ) ), name - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/repos/" + self.login + "/" + name, None, None ) - self._checkStatus( status, data ) return Repository.Repository( self._requester, data, completed = True ) def get_repos( self, type = GithubObject.NotSet ): @@ -302,13 +293,12 @@ class Organization( GithubObject.GithubObject ): url_parameters = dict() if type is not GithubObject.NotSet: url_parameters[ "type" ] = type - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/repos", url_parameters, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Repository.Repository, self._requester, @@ -318,23 +308,21 @@ class Organization( GithubObject.GithubObject ): def get_team( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/teams/" + str( id ), None, None ) - self._checkStatus( status, data ) return Team.Team( self._requester, data, completed = True ) def get_teams( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/teams", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Team.Team, self._requester, @@ -344,7 +332,7 @@ class Organization( GithubObject.GithubObject ): def has_in_members( self, member ): assert isinstance( member, NamedUser.NamedUser ), member - status, headers, data = self._request( + status, headers, data = self._requester.requestRaw( "GET", self.url + "/members/" + member._identity, None, @@ -354,7 +342,7 @@ class Organization( GithubObject.GithubObject ): def has_in_public_members( self, public_member ): assert isinstance( public_member, NamedUser.NamedUser ), public_member - status, headers, data = self._request( + status, headers, data = self._requester.requestRaw( "GET", self.url + "/public_members/" + public_member._identity, None, @@ -364,23 +352,21 @@ class Organization( GithubObject.GithubObject ): def remove_from_members( self, member ): assert isinstance( member, NamedUser.NamedUser ), member - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url + "/members/" + member._identity, None, None ) - self._checkStatus( status, data ) def remove_from_public_members( self, public_member ): assert isinstance( public_member, NamedUser.NamedUser ), public_member - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url + "/public_members/" + public_member._identity, None, None ) - self._checkStatus( status, data ) def _initAttributes( self ): self._avatar_url = GithubObject.NotSet diff --git a/github/PaginatedList.py b/github/PaginatedList.py index 8ca566f7..5eb73ed7 100644 --- a/github/PaginatedList.py +++ b/github/PaginatedList.py @@ -50,8 +50,7 @@ class PaginatedList: self.__fetchNextPage() def __fetchNextPage( self ): - status, headers, data = self.__requester.request( "GET", self.__nextUrl, None, None ) - GithubObject.GithubObject._checkStatus( status, data ) + headers, data = self.__requester.requestAndCheck( "GET", self.__nextUrl, None, None ) return self.__appendData( headers, data ) def __appendData( self, headers, data ): diff --git a/github/PullRequest.py b/github/PullRequest.py index 31e4e54c..9b69ad16 100644 --- a/github/PullRequest.py +++ b/github/PullRequest.py @@ -155,13 +155,12 @@ class PullRequest( GithubObject.GithubObject ): "path": path, "position": position, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/comments", None, post_parameters ) - self._checkStatus( status, data ) return PullRequestComment.PullRequestComment( self._requester, data, completed = True ) def edit( self, title = GithubObject.NotSet, body = GithubObject.NotSet, state = GithubObject.NotSet ): @@ -175,34 +174,31 @@ class PullRequest( GithubObject.GithubObject ): post_parameters[ "body" ] = body if state is not GithubObject.NotSet: post_parameters[ "state" ] = state - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def get_comment( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self._parentUrl( self.url ) + "/comments/" + str( id ), None, None ) - self._checkStatus( status, data ) return PullRequestComment.PullRequestComment( self._requester, data, completed = True ) def get_comments( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/comments", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( PullRequestComment.PullRequestComment, self._requester, @@ -211,13 +207,12 @@ class PullRequest( GithubObject.GithubObject ): ) def get_commits( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/commits", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Commit.Commit, self._requester, @@ -226,13 +221,12 @@ class PullRequest( GithubObject.GithubObject ): ) def get_files( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/files", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( File.File, self._requester, @@ -241,7 +235,7 @@ class PullRequest( GithubObject.GithubObject ): ) def is_merged( self ): - status, headers, data = self._request( + status, headers, data = self._requester.requestRaw( "GET", self.url + "/merge", None, @@ -254,13 +248,12 @@ class PullRequest( GithubObject.GithubObject ): post_parameters = dict() if commit_message is not GithubObject.NotSet: post_parameters[ "commit_message" ] = commit_message - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PUT", self.url + "/merge", None, post_parameters ) - self._checkStatus( status, data ) return PullRequestMergeStatus.PullRequestMergeStatus( self._requester, data, completed = True ) def _initAttributes( self ): diff --git a/github/PullRequestComment.py b/github/PullRequestComment.py index f793217b..0533043a 100644 --- a/github/PullRequestComment.py +++ b/github/PullRequestComment.py @@ -64,26 +64,24 @@ class PullRequestComment( GithubObject.GithubObject ): return self._NoneIfNotSet( self._user ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, body ): assert isinstance( body, ( str, unicode ) ), body post_parameters = { "body": body, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def _initAttributes( self ): diff --git a/github/Repository.py b/github/Repository.py index 9f958722..4f327279 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -187,24 +187,22 @@ class Repository( GithubObject.GithubObject ): def add_to_collaborators( self, collaborator ): assert isinstance( collaborator, NamedUser.NamedUser ), collaborator - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PUT", self.url + "/collaborators/" + collaborator._identity, None, None ) - self._checkStatus( status, data ) def compare( self, base, head ): assert isinstance( base, ( str, unicode ) ), base assert isinstance( head, ( str, unicode ) ), head - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/compare/" + base + "..." + head, None, None ) - self._checkStatus( status, data ) return Comparison.Comparison( self._requester, data, completed = True ) def create_download( self, name, size, description = GithubObject.NotSet, content_type = GithubObject.NotSet ): @@ -220,13 +218,12 @@ class Repository( GithubObject.GithubObject ): post_parameters[ "description" ] = description if content_type is not GithubObject.NotSet: post_parameters[ "content_type" ] = content_type - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/downloads", None, post_parameters ) - self._checkStatus( status, data ) return Download.Download( self._requester, data, completed = True ) def create_git_blob( self, content, encoding ): @@ -236,13 +233,12 @@ class Repository( GithubObject.GithubObject ): "content": content, "encoding": encoding, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/git/blobs", None, post_parameters ) - self._checkStatus( status, data ) return GitBlob.GitBlob( self._requester, data, completed = True ) def create_git_commit( self, message, tree, parents, author = GithubObject.NotSet, committer = GithubObject.NotSet ): @@ -260,13 +256,12 @@ class Repository( GithubObject.GithubObject ): post_parameters[ "author" ] = author._identity if committer is not GithubObject.NotSet: post_parameters[ "committer" ] = committer._identity - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/git/commits", None, post_parameters ) - self._checkStatus( status, data ) return GitCommit.GitCommit( self._requester, data, completed = True ) def create_git_ref( self, ref, sha ): @@ -276,13 +271,12 @@ class Repository( GithubObject.GithubObject ): "ref": ref, "sha": sha, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/git/refs", None, post_parameters ) - self._checkStatus( status, data ) return GitRef.GitRef( self._requester, data, completed = True ) def create_git_tag( self, tag, message, object, type, tagger = GithubObject.NotSet ): @@ -299,13 +293,12 @@ class Repository( GithubObject.GithubObject ): } if tagger is not GithubObject.NotSet: post_parameters[ "tagger" ] = tagger._identity - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/git/tags", None, post_parameters ) - self._checkStatus( status, data ) return GitTag.GitTag( self._requester, data, completed = True ) def create_git_tree( self, tree, base_tree = GithubObject.NotSet ): @@ -316,13 +309,12 @@ class Repository( GithubObject.GithubObject ): } if base_tree is not GithubObject.NotSet: post_parameters[ "base_tree" ] = base_tree._identity - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/git/trees", None, post_parameters ) - self._checkStatus( status, data ) return GitTree.GitTree( self._requester, data, completed = True ) def create_hook( self, name, config, events = GithubObject.NotSet, active = GithubObject.NotSet ): @@ -338,13 +330,12 @@ class Repository( GithubObject.GithubObject ): post_parameters[ "events" ] = events if active is not GithubObject.NotSet: post_parameters[ "active" ] = active - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/hooks", None, post_parameters ) - self._checkStatus( status, data ) return Hook.Hook( self._requester, data, completed = True ) def create_issue( self, title, body = GithubObject.NotSet, assignee = GithubObject.NotSet, milestone = GithubObject.NotSet, labels = GithubObject.NotSet ): @@ -364,13 +355,12 @@ class Repository( GithubObject.GithubObject ): post_parameters[ "milestone" ] = milestone._identity if labels is not GithubObject.NotSet: post_parameters[ "labels" ] = [ element._identity for element in labels ] - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/issues", None, post_parameters ) - self._checkStatus( status, data ) return Issue.Issue( self._requester, data, completed = True ) def create_key( self, title, key ): @@ -380,13 +370,12 @@ class Repository( GithubObject.GithubObject ): "title": title, "key": key, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/keys", None, post_parameters ) - self._checkStatus( status, data ) return RepositoryKey.RepositoryKey( self._requester, data, completed = True, repoUrl = self._url ) def create_label( self, name, color ): @@ -396,13 +385,12 @@ class Repository( GithubObject.GithubObject ): "name": name, "color": color, } - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/labels", None, post_parameters ) - self._checkStatus( status, data ) return Label.Label( self._requester, data, completed = True ) def create_milestone( self, title, state = GithubObject.NotSet, description = GithubObject.NotSet, due_on = GithubObject.NotSet ): @@ -419,13 +407,12 @@ class Repository( GithubObject.GithubObject ): post_parameters[ "description" ] = description if due_on is not GithubObject.NotSet: post_parameters[ "due_on" ] = due_on.strftime( "%Y-%m-%d" ) - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/milestones", None, post_parameters ) - self._checkStatus( status, data ) return Milestone.Milestone( self._requester, data, completed = True ) def create_pull( self, *args, **kwds ): @@ -449,13 +436,12 @@ class Repository( GithubObject.GithubObject ): def __create_pull( self, **kwds ): post_parameters = kwds - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "POST", self.url + "/pulls", None, post_parameters ) - self._checkStatus( status, data ) return PullRequest.PullRequest( self._requester, data, completed = True ) def edit( self, name, description = GithubObject.NotSet, homepage = GithubObject.NotSet, public = GithubObject.NotSet, has_issues = GithubObject.NotSet, has_wiki = GithubObject.NotSet, has_downloads = GithubObject.NotSet ): @@ -481,23 +467,21 @@ class Repository( GithubObject.GithubObject ): post_parameters[ "has_wiki" ] = has_wiki if has_downloads is not GithubObject.NotSet: post_parameters[ "has_downloads" ] = has_downloads - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def get_branches( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/branches", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Branch.Branch, self._requester, @@ -506,13 +490,12 @@ class Repository( GithubObject.GithubObject ): ) def get_collaborators( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/collaborators", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser.NamedUser, self._requester, @@ -522,23 +505,21 @@ class Repository( GithubObject.GithubObject ): def get_comment( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/comments/" + str( id ), None, None ) - self._checkStatus( status, data ) return CommitComment.CommitComment( self._requester, data, completed = True ) def get_comments( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/comments", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( CommitComment.CommitComment, self._requester, @@ -548,13 +529,12 @@ class Repository( GithubObject.GithubObject ): def get_commit( self, sha ): assert isinstance( sha, ( str, unicode ) ), sha - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/commits/" + sha, None, None ) - self._checkStatus( status, data ) return Commit.Commit( self._requester, data, completed = True ) def get_commits( self, sha = GithubObject.NotSet, path = GithubObject.NotSet ): @@ -565,13 +545,12 @@ class Repository( GithubObject.GithubObject ): url_parameters[ "sha" ] = sha if path is not GithubObject.NotSet: url_parameters[ "path" ] = path - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/commits", url_parameters, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Commit.Commit, self._requester, @@ -580,13 +559,12 @@ class Repository( GithubObject.GithubObject ): ) def get_contributors( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/contributors", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser.NamedUser, self._requester, @@ -596,23 +574,21 @@ class Repository( GithubObject.GithubObject ): def get_download( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/downloads/" + str( id ), None, None ) - self._checkStatus( status, data ) return Download.Download( self._requester, data, completed = True ) def get_downloads( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/downloads", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Download.Download, self._requester, @@ -621,13 +597,12 @@ class Repository( GithubObject.GithubObject ): ) def get_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/events", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Event.Event, self._requester, @@ -636,13 +611,12 @@ class Repository( GithubObject.GithubObject ): ) def get_forks( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/forks", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Repository, self._requester, @@ -652,45 +626,41 @@ class Repository( GithubObject.GithubObject ): def get_git_blob( self, sha ): assert isinstance( sha, ( str, unicode ) ), sha - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/git/blobs/" + sha, None, None ) - self._checkStatus( status, data ) return GitBlob.GitBlob( self._requester, data, completed = True ) def get_git_commit( self, sha ): assert isinstance( sha, ( str, unicode ) ), sha - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/git/commits/" + sha, None, None ) - self._checkStatus( status, data ) return GitCommit.GitCommit( self._requester, data, completed = True ) def get_git_ref( self, ref ): assert isinstance( ref, ( str, unicode ) ), ref - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/git/" + ref, None, None ) - self._checkStatus( status, data ) return GitRef.GitRef( self._requester, data, completed = True ) def get_git_refs( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/git/refs", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( GitRef.GitRef, self._requester, @@ -700,13 +670,12 @@ class Repository( GithubObject.GithubObject ): def get_git_tag( self, sha ): assert isinstance( sha, ( str, unicode ) ), sha - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/git/tags/" + sha, None, None ) - self._checkStatus( status, data ) return GitTag.GitTag( self._requester, data, completed = True ) def get_git_tree( self, sha, recursive = GithubObject.NotSet ): @@ -715,34 +684,31 @@ class Repository( GithubObject.GithubObject ): url_parameters = dict() if recursive is not GithubObject.NotSet: url_parameters[ "recursive" ] = recursive - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/git/trees/" + sha, url_parameters, None ) - self._checkStatus( status, data ) return GitTree.GitTree( self._requester, data, completed = True ) def get_hook( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/hooks/" + str( id ), None, None ) - self._checkStatus( status, data ) return Hook.Hook( self._requester, data, completed = True ) def get_hooks( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/hooks", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Hook.Hook, self._requester, @@ -752,13 +718,12 @@ class Repository( GithubObject.GithubObject ): def get_issue( self, number ): assert isinstance( number, int ), number - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/issues/" + str( number ), None, None ) - self._checkStatus( status, data ) return Issue.Issue( self._requester, data, completed = True ) def get_issues( self, milestone = GithubObject.NotSet, state = GithubObject.NotSet, assignee = GithubObject.NotSet, mentioned = GithubObject.NotSet, labels = GithubObject.NotSet, sort = GithubObject.NotSet, direction = GithubObject.NotSet, since = GithubObject.NotSet ): @@ -793,13 +758,12 @@ class Repository( GithubObject.GithubObject ): url_parameters[ "direction" ] = direction if since is not GithubObject.NotSet: url_parameters[ "since" ] = since.strftime( "%Y-%m-%dT%H:%M:%SZ" ) - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/issues", url_parameters, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Issue.Issue, self._requester, @@ -809,23 +773,21 @@ class Repository( GithubObject.GithubObject ): def get_issues_event( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/issues/events/" + str( id ), None, None ) - self._checkStatus( status, data ) return IssueEvent.IssueEvent( self._requester, data, completed = True ) def get_issues_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/issues/events", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( IssueEvent.IssueEvent, self._requester, @@ -835,23 +797,21 @@ class Repository( GithubObject.GithubObject ): def get_key( self, id ): assert isinstance( id, int ), id - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/keys/" + str( id ), None, None ) - self._checkStatus( status, data ) return RepositoryKey.RepositoryKey( self._requester, data, completed = True, repoUrl = self._url ) def get_keys( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/keys", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( lambda requester, data, completed: RepositoryKey.RepositoryKey( requester, data, completed, repoUrl = self._url ), self._requester, @@ -861,23 +821,21 @@ class Repository( GithubObject.GithubObject ): def get_label( self, name ): assert isinstance( name, ( str, unicode ) ), name - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/labels/" + urllib.quote( name ), None, None ) - self._checkStatus( status, data ) return Label.Label( self._requester, data, completed = True ) def get_labels( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/labels", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Label.Label, self._requester, @@ -886,24 +844,22 @@ class Repository( GithubObject.GithubObject ): ) def get_languages( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/languages", None, None ) - self._checkStatus( status, data ) return data def get_milestone( self, number ): assert isinstance( number, int ), number - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/milestones/" + str( number ), None, None ) - self._checkStatus( status, data ) return Milestone.Milestone( self._requester, data, completed = True ) def get_milestones( self, state = GithubObject.NotSet, sort = GithubObject.NotSet, direction = GithubObject.NotSet ): @@ -917,13 +873,12 @@ class Repository( GithubObject.GithubObject ): url_parameters[ "sort" ] = sort if direction is not GithubObject.NotSet: url_parameters[ "direction" ] = direction - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/milestones", url_parameters, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Milestone.Milestone, self._requester, @@ -932,13 +887,12 @@ class Repository( GithubObject.GithubObject ): ) def get_network_events( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", "https://api.github.com/networks/" + self.owner.login + "/" + self.name + "/events", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Event.Event, self._requester, @@ -948,13 +902,12 @@ class Repository( GithubObject.GithubObject ): def get_pull( self, number ): assert isinstance( number, int ), number - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/pulls/" + str( number ), None, None ) - self._checkStatus( status, data ) return PullRequest.PullRequest( self._requester, data, completed = True ) def get_pulls( self, state = GithubObject.NotSet ): @@ -962,13 +915,12 @@ class Repository( GithubObject.GithubObject ): url_parameters = dict() if state is not GithubObject.NotSet: url_parameters[ "state" ] = state - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/pulls", url_parameters, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( PullRequest.PullRequest, self._requester, @@ -977,13 +929,12 @@ class Repository( GithubObject.GithubObject ): ) def get_tags( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/tags", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Tag.Tag, self._requester, @@ -992,13 +943,12 @@ class Repository( GithubObject.GithubObject ): ) def get_teams( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/teams", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Team.Team, self._requester, @@ -1007,13 +957,12 @@ class Repository( GithubObject.GithubObject ): ) def get_watchers( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/watchers", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser.NamedUser, self._requester, @@ -1023,7 +972,7 @@ class Repository( GithubObject.GithubObject ): def has_in_collaborators( self, collaborator ): assert isinstance( collaborator, NamedUser.NamedUser ), collaborator - status, headers, data = self._request( + status, headers, data = self._requester.requestRaw( "GET", self.url + "/collaborators/" + collaborator._identity, None, @@ -1033,13 +982,12 @@ class Repository( GithubObject.GithubObject ): def remove_from_collaborators( self, collaborator ): assert isinstance( collaborator, NamedUser.NamedUser ), collaborator - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url + "/collaborators/" + collaborator._identity, None, None ) - self._checkStatus( status, data ) @property def _identity( self ): diff --git a/github/RepositoryKey.py b/github/RepositoryKey.py index 2e6610d4..0b85a9a1 100644 --- a/github/RepositoryKey.py +++ b/github/RepositoryKey.py @@ -38,13 +38,12 @@ class RepositoryKey( GithubObject.GithubObject ): return self._NoneIfNotSet( self._verified ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.__customUrl, None, None ) - self._checkStatus( status, data ) def edit( self, title = GithubObject.NotSet, key = GithubObject.NotSet ): assert title is GithubObject.NotSet or isinstance( title, ( str, unicode ) ), title @@ -54,13 +53,12 @@ class RepositoryKey( GithubObject.GithubObject ): post_parameters[ "title" ] = title if key is not GithubObject.NotSet: post_parameters[ "key" ] = key - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.__customUrl, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def _initAttributes( self ): diff --git a/github/Requester.py b/github/Requester.py index d62b5c19..a609cc66 100644 --- a/github/Requester.py +++ b/github/Requester.py @@ -3,6 +3,8 @@ import json import base64 import urllib +import GithubException + class Requester: def __init__( self, login_or_token, password ): if password is not None: @@ -15,7 +17,13 @@ class Requester: self.__authorizationHeader = None self.rate_limiting = ( 5000, 5000 ) - def request( self, verb, url, parameters, input ): + def requestAndCheck( self, verb, url, parameters, input ): + status, headers, output = self.requestRaw( verb, url, parameters, input ) + if status >= 400: + raise GithubException.GithubException( status, output ) + return headers, output + + def requestRaw( self, verb, url, parameters, input ): assert verb in [ "HEAD", "GET", "POST", "PATCH", "PUT", "DELETE" ] assert url.startswith( "https://api.github.com" ) url = url[ len( "https://api.github.com" ) : ] diff --git a/github/Team.py b/github/Team.py index 8b748d29..699afb39 100644 --- a/github/Team.py +++ b/github/Team.py @@ -40,32 +40,29 @@ class Team( GithubObject.GithubObject ): def add_to_members( self, member ): assert isinstance( member, NamedUser.NamedUser ), member - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PUT", self.url + "/members/" + member._identity, None, None ) - self._checkStatus( status, data ) def add_to_repos( self, repo ): assert isinstance( repo, Repository.Repository ), repo - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PUT", self.url + "/repos/" + repo._identity, None, None ) - self._checkStatus( status, data ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, name, permission = GithubObject.NotSet ): assert isinstance( name, ( str, unicode ) ), name @@ -75,23 +72,21 @@ class Team( GithubObject.GithubObject ): } if permission is not GithubObject.NotSet: post_parameters[ "permission" ] = permission - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def get_members( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/members", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( NamedUser.NamedUser, self._requester, @@ -100,13 +95,12 @@ class Team( GithubObject.GithubObject ): ) def get_repos( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "GET", self.url + "/repos", None, None ) - self._checkStatus( status, data ) return PaginatedList.PaginatedList( Repository.Repository, self._requester, @@ -116,7 +110,7 @@ class Team( GithubObject.GithubObject ): def has_in_members( self, member ): assert isinstance( member, NamedUser.NamedUser ), member - status, headers, data = self._request( + status, headers, data = self._requester.requestRaw( "GET", self.url + "/members/" + member._identity, None, @@ -126,7 +120,7 @@ class Team( GithubObject.GithubObject ): def has_in_repos( self, repo ): assert isinstance( repo, Repository.Repository ), repo - status, headers, data = self._request( + status, headers, data = self._requester.requestRaw( "GET", self.url + "/repos/" + repo._identity, None, @@ -136,23 +130,21 @@ class Team( GithubObject.GithubObject ): def remove_from_members( self, member ): assert isinstance( member, NamedUser.NamedUser ), member - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url + "/members/" + member._identity, None, None ) - self._checkStatus( status, data ) def remove_from_repos( self, repo ): assert isinstance( repo, Repository.Repository ), repo - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url + "/repos/" + repo._identity, None, None ) - self._checkStatus( status, data ) @property def _identity( self ): diff --git a/github/UserKey.py b/github/UserKey.py index 8df3ce29..3de32f48 100644 --- a/github/UserKey.py +++ b/github/UserKey.py @@ -30,13 +30,12 @@ class UserKey( GithubObject.GithubObject ): return self._NoneIfNotSet( self._verified ) def delete( self ): - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "DELETE", self.url, None, None ) - self._checkStatus( status, data ) def edit( self, title = GithubObject.NotSet, key = GithubObject.NotSet ): assert title is GithubObject.NotSet or isinstance( title, ( str, unicode ) ), title @@ -46,13 +45,12 @@ class UserKey( GithubObject.GithubObject ): post_parameters[ "title" ] = title if key is not GithubObject.NotSet: post_parameters[ "key" ] = key - status, headers, data = self._request( + headers, data = self._requester.requestAndCheck( "PATCH", self.url, None, post_parameters ) - self._checkStatus( status, data ) self._useAttributes( data ) def _initAttributes( self ):