From 7e6333da1a376a5f5c60c1e3d2e6e5a37527c8e9 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Thu, 13 Oct 2022 08:56:18 +0800 Subject: [PATCH 01/32] Fix CI (#2330) --- .git-blame-ignore-revs | 3 +++ .pre-commit-config.yaml | 12 ++++++------ github/AccessToken.py | 2 +- github/ApplicationOAuth.pyi | 11 ++--------- github/DeploymentStatus.pyi | 1 - github/GithubApp.pyi | 2 -- github/GithubException.py | 2 +- github/GithubException.pyi | 5 +++-- github/MainClass.pyi | 8 ++------ github/Organization.pyi | 1 - github/PaginatedList.pyi | 1 + github/ProjectColumn.pyi | 1 - github/Repository.pyi | 4 +--- github/Requester.py | 2 +- github/Requester.pyi | 24 +++++++++++++++++++----- github/StatsContributor.pyi | 1 + requirements.txt | 1 + tests/PaginatedList.py | 4 ++-- 18 files changed, 44 insertions(+), 41 deletions(-) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 9abd22d1d5..89ca110b2a 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -9,3 +9,6 @@ # Add pyupgrade to pre-commit e113e37de1ec687c68337d777f3629251b35ab28 + +Run pre-commit autoupdate and run all hooks +4c24c73d34b54a061b0c800eeea64dc64c230a63 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1af2eaac82..1dea2b1aff 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,22 +1,22 @@ repos: - repo: https://github.com/psf/black - rev: 20.8b1 + rev: 22.10.0 hooks: - id: black - repo: https://github.com/asottile/seed-isort-config - rev: v1.9.4 + rev: v2.2.0 hooks: - id: seed-isort-config - repo: https://github.com/pre-commit/mirrors-isort - rev: v4.3.21 + rev: v5.10.1 hooks: - id: isort - repo: https://gitlab.com/pycqa/flake8 - rev: 3.7.9 + rev: 3.9.2 hooks: - id: flake8 - repo: https://github.com/codespell-project/codespell - rev: v1.16.0 + rev: v2.2.1 hooks: - id: codespell exclude: tests/ @@ -24,7 +24,7 @@ repos: - --ignore-words-list="bloaded,nto,pullrequest,pullrequests,thi,tim,wan,Wan,chang,Chang" - --quiet-level=2 - repo: https://github.com/asottile/pyupgrade - rev: v2.7.4 + rev: v3.1.0 hooks: - id: pyupgrade args: diff --git a/github/AccessToken.py b/github/AccessToken.py index f2fb64f468..bb6423eda5 100644 --- a/github/AccessToken.py +++ b/github/AccessToken.py @@ -31,7 +31,7 @@ class AccessToken(github.GithubObject.NonCompletableGithubObject): def __repr__(self): return self.get__repr__( { - "token": "{}...".format(self.token[:5]), + "token": f"{self.token[:5]}...", "scope": self.scope, "type": self.type, } diff --git a/github/ApplicationOAuth.pyi b/github/ApplicationOAuth.pyi index cbd6ca89ee..5465d83e9f 100644 --- a/github/ApplicationOAuth.pyi +++ b/github/ApplicationOAuth.pyi @@ -12,13 +12,6 @@ class ApplicationOAuth(NonCompletableGithubObject): @property def client_secret(self) -> str: ... def get_login_url( - self, - redirect_uri: Optional[str], - state: Optional[str], - login: Optional[str] + self, redirect_uri: Optional[str], state: Optional[str], login: Optional[str] ) -> str: ... - def get_access_token( - self, - code: str, - state: Optional[str] - ) -> AccessToken: ... + def get_access_token(self, code: str, state: Optional[str]) -> AccessToken: ... diff --git a/github/DeploymentStatus.pyi b/github/DeploymentStatus.pyi index 1b512d3a15..98736eaca9 100644 --- a/github/DeploymentStatus.pyi +++ b/github/DeploymentStatus.pyi @@ -4,7 +4,6 @@ from typing import Any, Dict from github.GithubObject import CompletableGithubObject from github.NamedUser import NamedUser - class DeploymentStatus(CompletableGithubObject): def __repr__(self) -> str: ... def _initAttributes(self) -> None: ... diff --git a/github/GithubApp.pyi b/github/GithubApp.pyi index 0b3a593221..8992a78345 100644 --- a/github/GithubApp.pyi +++ b/github/GithubApp.pyi @@ -1,11 +1,9 @@ - from typing import Any, Dict, List from datetime import datetime from github.GithubObject import CompletableGithubObject from github.NamedUser import NamedUser - class GithubApp(CompletableGithubObject): def __repr__(self) -> str: ... def _initAttributes(self) -> None: ... diff --git a/github/GithubException.py b/github/GithubException.py index f406a4136f..d6148703ba 100644 --- a/github/GithubException.py +++ b/github/GithubException.py @@ -67,7 +67,7 @@ def headers(self): return self.__headers def __str__(self): - return "{status} {data}".format(status=self.status, data=json.dumps(self.data)) + return f"{self.status} {json.dumps(self.data)}" class BadCredentialsException(GithubException): diff --git a/github/GithubException.pyi b/github/GithubException.pyi index 8c767b9e97..b26f89f5ea 100644 --- a/github/GithubException.pyi +++ b/github/GithubException.pyi @@ -1,13 +1,14 @@ from typing import Any, Dict, List, Optional, Tuple, Type, Union class GithubException(Exception): - def __init__(self, status: Union[int, str], data: Any, headers: Optional[Dict[str, str]]) -> None: ... + def __init__( + self, status: Union[int, str], data: Any, headers: Optional[Dict[str, str]] + ) -> None: ... def __str__(self) -> str: ... @property def data(self) -> Dict[str, Union[str, List[str], List[Dict[str, str]]]]: ... @property def status(self) -> int: ... - @property def headers(self) -> Union[None, Dict[str, str]]: ... diff --git a/github/MainClass.pyi b/github/MainClass.pyi index 22eddfa620..a757e9e28b 100644 --- a/github/MainClass.pyi +++ b/github/MainClass.pyi @@ -24,7 +24,7 @@ from github.Topic import Topic # from urllib3.util.retry import Retry -TGithubObject = TypeVar('TGithubObject', bound=GithubObject) +TGithubObject = TypeVar("TGithubObject", bound=GithubObject) class Github: def __init__( @@ -130,11 +130,7 @@ class Github: order: Union[str, _NotSetType] = ..., **qualifiers: Any ) -> PaginatedList[Repository]: ... - def search_topics( - self, - query: str, - **qualifiers: Any - ) -> PaginatedList[Topic]: ... + def search_topics(self, query: str, **qualifiers: Any) -> PaginatedList[Topic]: ... def search_users( self, query: str, diff --git a/github/Organization.pyi b/github/Organization.pyi index 61434ba300..7dfbbb1e23 100644 --- a/github/Organization.pyi +++ b/github/Organization.pyi @@ -218,4 +218,3 @@ class Organization(CompletableGithubObject): def updated_at(self) -> datetime: ... @property def url(self) -> str: ... - diff --git a/github/PaginatedList.pyi b/github/PaginatedList.pyi index 1a02632eb0..f66257a8a4 100644 --- a/github/PaginatedList.pyi +++ b/github/PaginatedList.pyi @@ -14,6 +14,7 @@ class PaginatedListBase(Generic[T]): def __iter__(self) -> Iterator[T]: ... def _grow(self) -> Any: ... def _isBiggerThan(self, index: int) -> bool: ... + class _Slice: def __init__(self, theList: PaginatedList[T], theSlice: slice) -> None: ... def __iter__(self) -> Iterator[T]: ... diff --git a/github/ProjectColumn.pyi b/github/ProjectColumn.pyi index 9634ae9a4e..a30d11df07 100644 --- a/github/ProjectColumn.pyi +++ b/github/ProjectColumn.pyi @@ -37,4 +37,3 @@ class ProjectColumn(CompletableGithubObject): def move(self, position: str) -> bool: ... def delete(self) -> bool: ... def edit(self, name: str) -> None: ... - diff --git a/github/Repository.pyi b/github/Repository.pyi index 53282ec56c..103fc8f1c7 100644 --- a/github/Repository.pyi +++ b/github/Repository.pyi @@ -307,9 +307,7 @@ class Repository(CompletableGithubObject): ) -> str: ... def get_assignees(self) -> PaginatedList[NamedUser]: ... def get_branch(self, branch: str) -> Branch: ... - def rename_branch( - self, branch: Union[str, Branch], new_name: str - ) -> bool: ... + def rename_branch(self, branch: Union[str, Branch], new_name: str) -> bool: ... def get_branches(self) -> PaginatedList[Branch]: ... def get_check_run(self, check_run_id: int) -> CheckRun: ... def get_check_suite(self, check_suite_id: int) -> CheckSuite: ... diff --git a/github/Requester.py b/github/Requester.py index a61e0038e0..8c6e13cea9 100644 --- a/github/Requester.py +++ b/github/Requester.py @@ -307,7 +307,7 @@ def __init__( if password is not None: login = login_or_token b64 = ( - base64.b64encode((f"{login}:{password}").encode("utf-8")) + base64.b64encode((f"{login}:{password}").encode()) .decode("utf-8") .replace("\n", "") ) diff --git a/github/Requester.pyi b/github/Requester.pyi index 574b1517c4..f97220c136 100644 --- a/github/Requester.pyi +++ b/github/Requester.pyi @@ -50,20 +50,34 @@ class Requester: ) -> None: ... def NEW_DEBUG_FRAME(self, requestHeader: Dict[str, str]) -> None: ... def __check( - self, status: int, responseHeader: Dict[str, Any], output: str, + self, + status: int, + responseHeader: Dict[str, Any], + output: str, ) -> Tuple[Dict[str, Any], Dict[str, Any]]: ... - def __addParametersToUrl(self, url: str, parameters: Dict[str, Any],) -> str: ... + def __addParametersToUrl( + self, + url: str, + parameters: Dict[str, Any], + ) -> str: ... def __authenticate( - self, url: str, responseHeader: Dict[str, Any], parameters: Dict[str, Any], + self, + url: str, + responseHeader: Dict[str, Any], + parameters: Dict[str, Any], ) -> None: ... def __customConnection( - self, url: str, + self, + url: str, ) -> Optional[Union[HTTPRequestsConnectionClass, HTTPSRequestsConnectionClass]]: ... def __createConnection( self, ) -> Union[HTTPRequestsConnectionClass, HTTPSRequestsConnectionClass]: ... def __createException( - self, status: int, headers: Dict[str, Any], output: str, + self, + status: int, + headers: Dict[str, Any], + output: str, ) -> Any: ... def __log( self, diff --git a/github/StatsContributor.pyi b/github/StatsContributor.pyi index ee483ec680..6b9b1b0615 100644 --- a/github/StatsContributor.pyi +++ b/github/StatsContributor.pyi @@ -13,6 +13,7 @@ class StatsContributor(NonCompletableGithubObject): def total(self) -> int: ... @property def weeks(self) -> List[Week]: ... + class Week(NonCompletableGithubObject): def _initAttributes(self) -> None: ... def _useAttributes(self, attributes: Dict[str, int]) -> None: ... diff --git a/requirements.txt b/requirements.txt index c4de158360..ae9478587a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,5 +2,6 @@ pynacl>=1.4.0 requests>=2.14.0 pyjwt>=2.0 sphinx<3 +Jinja2<3.1 sphinx-rtd-theme<1.1 Deprecated diff --git a/tests/PaginatedList.py b/tests/PaginatedList.py index c02f309e60..9a7bf7f1c8 100644 --- a/tests/PaginatedList.py +++ b/tests/PaginatedList.py @@ -289,9 +289,9 @@ def testCustomPerPage(self): self.assertEqual(len(list(self.repo.get_issues())), 456) def testCustomPerPageWithNoUrlParams(self): - from . import ( + from . import ( # Don't polute github.tests namespace, it would conflict with github.tests.CommitComment CommitComment, - ) # Don't polute github.tests namespace, it would conflict with github.tests.CommitComment + ) self.g.per_page = 100 PaginatedListImpl( From b50283a7cf5a6954a023c20fdb63dfbba407843b Mon Sep 17 00:00:00 2001 From: KimSia Sim <245021+simkimsia@users.noreply.github.com> Date: Thu, 13 Oct 2022 09:13:31 +0800 Subject: [PATCH 02/32] Create repo from template (#2090) Co-authored-by: bagashvilit Co-authored-by: WonjoonC Co-authored-by: Isac Souza Co-authored-by: Isac Souza Co-authored-by: Liuyang Wan --- github/AuthenticatedUser.py | 41 +++++++++++++++++++ github/Consts.py | 3 ++ github/Organization.py | 41 +++++++++++++++++++ github/Repository.py | 23 ++++++++++- tests/AuthenticatedUser.py | 26 ++++++++++++ tests/Organization.py | 26 ++++++++++++ ...ticatedUser.testCreateRepoFromTemplate.txt | 33 +++++++++++++++ ...CreateRepoFromTemplateWithAllArguments.txt | 33 +++++++++++++++ ...rganization.testCreateRepoFromTemplate.txt | 22 ++++++++++ ...CreateRepoFromTemplateWithAllArguments.txt | 22 ++++++++++ tests/Repository.py | 1 + 11 files changed, 270 insertions(+), 1 deletion(-) create mode 100644 tests/ReplayData/AuthenticatedUser.testCreateRepoFromTemplate.txt create mode 100644 tests/ReplayData/AuthenticatedUser.testCreateRepoFromTemplateWithAllArguments.txt create mode 100644 tests/ReplayData/Organization.testCreateRepoFromTemplate.txt create mode 100644 tests/ReplayData/Organization.testCreateRepoFromTemplateWithAllArguments.txt diff --git a/github/AuthenticatedUser.py b/github/AuthenticatedUser.py index 79d02cdf2c..43018a5c60 100644 --- a/github/AuthenticatedUser.py +++ b/github/AuthenticatedUser.py @@ -509,6 +509,47 @@ def create_fork(self, repo): self._requester, headers, data, completed=True ) + def create_repo_from_template( + self, + name, + repo, + description=github.GithubObject.NotSet, + private=github.GithubObject.NotSet, + ): + """ + :calls: `POST /repos/{template_owner}/{template_repo}/generate `_ + :param name: string + :param repo :class:`github.Repository.Repository` + :param description: string + :param private: bool + :rtype: :class:`github.Repository.Repository` + """ + assert isinstance(name, str), name + assert isinstance(repo, github.Repository.Repository), repo + assert description is github.GithubObject.NotSet or isinstance( + description, str + ), description + assert private is github.GithubObject.NotSet or isinstance( + private, bool + ), private + post_parameters = { + "name": name, + "owner": self.login, + } + if description is not github.GithubObject.NotSet: + post_parameters["description"] = description + if private is not github.GithubObject.NotSet: + post_parameters["private"] = private + headers, data = self._requester.requestJsonAndCheck( + "POST", + f"/repos/{repo.owner.login}/{repo.name}/generate", + input=post_parameters, + headers={"Accept": "application/vnd.github.v3+json"}, + ) + return github.Repository.Repository( + self._requester, headers, data, completed=True + ) + def create_gist(self, public, files, description=github.GithubObject.NotSet): """ :calls: `POST /gists `_ diff --git a/github/Consts.py b/github/Consts.py index 9f5aaeeb8c..6f2d9bcb99 100644 --- a/github/Consts.py +++ b/github/Consts.py @@ -99,6 +99,9 @@ # https://developer.github.com/changes/2018-05-24-user-migration-api/ mediaTypeMigrationPreview = "application/vnd.github.wyandotte-preview+json" +# https://developer.github.com/changes/2019-07-16-repository-templates-api/ +mediaTypeTemplatesPreview = "application/vnd.github.baptiste-preview+json" + # https://docs.github.com/en/rest/reference/search#highlighting-code-search-results-1 highLightSearchPreview = "application/vnd.github.v3.text-match+json" diff --git a/github/Organization.py b/github/Organization.py index 33d5b7486a..723629d4ce 100644 --- a/github/Organization.py +++ b/github/Organization.py @@ -403,6 +403,47 @@ def create_fork(self, repo): self._requester, headers, data, completed=True ) + def create_repo_from_template( + self, + name, + repo, + description=github.GithubObject.NotSet, + private=github.GithubObject.NotSet, + ): + """self.name + :calls: `POST /repos/{template_owner}/{template_repo}/generate `_ + :param name: string + :param repo :class:`github.Repository.Repository` + :param description: string + :param private: bool + :rtype: :class:`github.Repository.Repository` + """ + assert isinstance(name, str), name + assert isinstance(repo, github.Repository.Repository), repo + assert description is github.GithubObject.NotSet or isinstance( + description, str + ), description + assert private is github.GithubObject.NotSet or isinstance( + private, bool + ), private + post_parameters = { + "name": name, + "owner": self.login, + } + if description is not github.GithubObject.NotSet: + post_parameters["description"] = description + if private is not github.GithubObject.NotSet: + post_parameters["private"] = private + headers, data = self._requester.requestJsonAndCheck( + "POST", + f"/repos/{repo.owner.login}/{repo.name}/generate", + input=post_parameters, + headers={"Accept": "application/vnd.github.v3+json"}, + ) + return github.Repository.Repository( + self._requester, headers, data, completed=True + ) + def create_hook( self, name, diff --git a/github/Repository.py b/github/Repository.py index 6b4af5a6e6..aef02f2f1f 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -473,6 +473,14 @@ def id(self): self._completeIfNotSet(self._id) return self._id.value + @property + def is_template(self): + """ + :type: bool + """ + self._completeIfNotSet(self._is_template) + return self._is_template.value + @property def issue_comment_url(self): """ @@ -763,6 +771,14 @@ def teams_url(self): self._completeIfNotSet(self._teams_url) return self._teams_url.value + @property + def topics(self): + """ + :type: list of strings + """ + self._completeIfNotSet(self._topics) + return self._topics.value + @property def trees_url(self): """ @@ -995,7 +1011,6 @@ def create_git_tag_and_release( """ Convenience function that calls :meth:`Repository.create_git_tag` and :meth:`Repository.create_git_release`. - :param tag: string :param tag_message: string :param release_name: string @@ -3729,6 +3744,7 @@ def _initAttributes(self): self._hooks_url = github.GithubObject.NotSet self._html_url = github.GithubObject.NotSet self._id = github.GithubObject.NotSet + self._is_template = github.GithubObject.NotSet self._issue_comment_url = github.GithubObject.NotSet self._issue_events_url = github.GithubObject.NotSet self._issues_url = github.GithubObject.NotSet @@ -3765,6 +3781,7 @@ def _initAttributes(self): self._svn_url = github.GithubObject.NotSet self._tags_url = github.GithubObject.NotSet self._teams_url = github.GithubObject.NotSet + self._topics = github.GithubObject.NotSet self._trees_url = github.GithubObject.NotSet self._updated_at = github.GithubObject.NotSet self._url = github.GithubObject.NotSet @@ -3871,6 +3888,8 @@ def _useAttributes(self, attributes): self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + if "is_template" in attributes: # pragma no branch + self._is_template = self._makeBoolAttribute(attributes["is_template"]) if "issue_comment_url" in attributes: # pragma no branch self._issue_comment_url = self._makeStringAttribute( attributes["issue_comment_url"] @@ -3971,6 +3990,8 @@ def _useAttributes(self, attributes): self._teams_url = self._makeStringAttribute(attributes["teams_url"]) if "trees_url" in attributes: # pragma no branch self._trees_url = self._makeStringAttribute(attributes["trees_url"]) + if "topics" in attributes: # pragma no branch + self._topics = self._makeListOfStringsAttribute(attributes["topics"]) if "updated_at" in attributes: # pragma no branch self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "url" in attributes: # pragma no branch diff --git a/tests/AuthenticatedUser.py b/tests/AuthenticatedUser.py index 61edafe77b..ca0b999fdf 100644 --- a/tests/AuthenticatedUser.py +++ b/tests/AuthenticatedUser.py @@ -664,6 +664,32 @@ def testCreateFork(self): repo = self.user.create_fork(self.g.get_user("nvie").get_repo("gitflow")) self.assertEqual(repo.source.full_name, "nvie/gitflow") + def testCreateRepoFromTemplate(self): + template_repo = self.g.get_repo("actions/hello-world-docker-action") + + repo = self.user.create_repo_from_template( + "hello-world-docker-action-new", template_repo + ) + self.assertEqual( + repo.url, + "https://api.github.com/repos/jacquev6/hello-world-docker-action-new", + ) + self.assertFalse(repo.is_template) + + def testCreateRepoFromTemplateWithAllArguments(self): + template_repo = self.g.get_repo("actions/hello-world-docker-action") + + description = "My repo from template" + private = True + repo = self.user.create_repo_from_template( + "hello-world-docker-action-new", + template_repo, + description=description, + private=private, + ) + self.assertEqual(repo.description, description) + self.assertTrue(repo.private) + def testGetNotification(self): notification = self.user.get_notification("8406712") self.assertEqual(notification.id, "8406712") diff --git a/tests/Organization.py b/tests/Organization.py index 3f68a770d8..18b711b166 100644 --- a/tests/Organization.py +++ b/tests/Organization.py @@ -358,6 +358,32 @@ def testCreateFork(self): self.assertFalse(repo.has_wiki) self.assertFalse(repo.has_pages) + def testCreateRepoFromTemplate(self): + template_repo = self.g.get_repo("actions/hello-world-docker-action") + + repo = self.org.create_repo_from_template( + "hello-world-docker-action-new", template_repo + ) + self.assertEqual( + repo.url, + "https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new", + ) + self.assertFalse(repo.is_template) + + def testCreateRepoFromTemplateWithAllArguments(self): + template_repo = self.g.get_repo("actions/hello-world-docker-action") + + description = "My repo from template" + private = True + repo = self.org.create_repo_from_template( + "hello-world-docker-action-new", + template_repo, + description=description, + private=private, + ) + self.assertEqual(repo.description, description) + self.assertTrue(repo.private) + @mock.patch("github.PublicKey.encrypt") def testCreateSecret(self, encrypt): # encrypt returns a non-deterministic value, we need to mock it so the replay data matches diff --git a/tests/ReplayData/AuthenticatedUser.testCreateRepoFromTemplate.txt b/tests/ReplayData/AuthenticatedUser.testCreateRepoFromTemplate.txt new file mode 100644 index 0000000000..17d22aa222 --- /dev/null +++ b/tests/ReplayData/AuthenticatedUser.testCreateRepoFromTemplate.txt @@ -0,0 +1,33 @@ +https +GET +api.github.com +None +/repos/actions/hello-world-docker-action +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Tue, 11 Feb 2020 16:56:45 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4997'), ('X-RateLimit-Reset', '1581443569'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept'), ('ETag', 'W/"63c75e6c241c8aa34fa31eaac3091d88"'), ('Last-Modified', 'Fri, 07 Feb 2020 09:28:27 GMT'), ('X-OAuth-Scopes', 'public_repo, read:org, read:user, user:email'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '1; mode=block'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', '5200:6A2A:85CA2:FC534:5E42DCCD')] +{"id":200448202,"node_id":"MDEwOlJlcG9zaXRvcnkyMDA0NDgyMDI=","name":"hello-world-docker-action","full_name":"actions/hello-world-docker-action","private":false,"owner":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/actions/hello-world-docker-action","description":"A template to demonstrate how to build a Docker action.","fork":false,"url":"https://api.github.com/repos/actions/hello-world-docker-action","forks_url":"https://api.github.com/repos/actions/hello-world-docker-action/forks","keys_url":"https://api.github.com/repos/actions/hello-world-docker-action/keys{/key_id}","collaborators_url":"https://api.github.com/repos/actions/hello-world-docker-action/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/actions/hello-world-docker-action/teams","hooks_url":"https://api.github.com/repos/actions/hello-world-docker-action/hooks","issue_events_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/events{/number}","events_url":"https://api.github.com/repos/actions/hello-world-docker-action/events","assignees_url":"https://api.github.com/repos/actions/hello-world-docker-action/assignees{/user}","branches_url":"https://api.github.com/repos/actions/hello-world-docker-action/branches{/branch}","tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/tags","blobs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/refs{/sha}","trees_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/trees{/sha}","statuses_url":"https://api.github.com/repos/actions/hello-world-docker-action/statuses/{sha}","languages_url":"https://api.github.com/repos/actions/hello-world-docker-action/languages","stargazers_url":"https://api.github.com/repos/actions/hello-world-docker-action/stargazers","contributors_url":"https://api.github.com/repos/actions/hello-world-docker-action/contributors","subscribers_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscribers","subscription_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscription","commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/commits{/sha}","git_commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/commits{/sha}","comments_url":"https://api.github.com/repos/actions/hello-world-docker-action/comments{/number}","issue_comment_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/comments{/number}","contents_url":"https://api.github.com/repos/actions/hello-world-docker-action/contents/{+path}","compare_url":"https://api.github.com/repos/actions/hello-world-docker-action/compare/{base}...{head}","merges_url":"https://api.github.com/repos/actions/hello-world-docker-action/merges","archive_url":"https://api.github.com/repos/actions/hello-world-docker-action/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/actions/hello-world-docker-action/downloads","issues_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues{/number}","pulls_url":"https://api.github.com/repos/actions/hello-world-docker-action/pulls{/number}","milestones_url":"https://api.github.com/repos/actions/hello-world-docker-action/milestones{/number}","notifications_url":"https://api.github.com/repos/actions/hello-world-docker-action/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/actions/hello-world-docker-action/labels{/name}","releases_url":"https://api.github.com/repos/actions/hello-world-docker-action/releases{/id}","deployments_url":"https://api.github.com/repos/actions/hello-world-docker-action/deployments","created_at":"2019-08-04T04:10:12Z","updated_at":"2020-02-07T09:28:27Z","pushed_at":"2020-01-17T19:48:23Z","git_url":"git://github.com/actions/hello-world-docker-action.git","ssh_url":"git@github.com:actions/hello-world-docker-action.git","clone_url":"https://github.com/actions/hello-world-docker-action.git","svn_url":"https://github.com/actions/hello-world-docker-action","homepage":"https://help.github.com/en/articles/creating-a-docker-container-action","size":11,"stargazers_count":26,"watchers_count":26,"language":"Dockerfile","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":30,"open_issues":1,"watchers":26,"default_branch":"master","permissions":{"admin":false,"push":false,"pull":true},"temp_clone_token":"","organization":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"network_count":30,"subscribers_count":1} + +https +GET +api.github.com +None +/user +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"79f748546e5fc4492505a70de6542183"'), ('date', 'Tue, 08 May 2012 09:51:20 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"public_repos":10,"type":"User","url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","followers":13,"bio":"","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","disk_usage":16692,"plan":{"private_repos":5,"space":614400,"name":"micro","collaborators":1},"html_url":"https://github.com/jacquev6","blog":"http://vincent-jacques.net","login":"jacquev6","email":"vincent@vincent-jacques.net","created_at":"2010-07-09T06:10:06Z","company":"Criteo","location":"Paris, France","total_private_repos":5,"public_gists":1,"following":24,"name":"Vincent Jacques","id":327146,"owned_private_repos":5,"private_gists":5,"collaborators":0,"hireable":false,"node_id":"MDQ6VXNlcjMyNzE0Ng=="} + +https +POST +api.github.com +None +/repos/actions/hello-world-docker-action/generate +{'Accept': 'application/vnd.github.v3+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"name": "hello-world-docker-action-new", "owner": "jacquev6"} +201 +[('Server', 'GitHub.com'), ('Date', 'Tue, 11 Feb 2020 16:56:49 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '11775'), ('Status', '201 Created'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1581443568'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept'), ('ETag', '"eabd6fce61227c57848e030e45c468c3"'), ('X-OAuth-Scopes', 'public_repo, read:org, read:user, user:email'), ('X-Accepted-OAuth-Scopes', ''), ('Location', 'https://api.github.com/repos/jacquev6/hello-world-docker-action-new'), ('X-GitHub-Media-Type', 'github.baptiste-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '1; mode=block'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('X-GitHub-Request-Id', '8C7A:1AEB:84521:F940F:5E42DCCE')] +{"id":239815940,"node_id":"MDEwOlJlcG9zaXRvcnkyMzk4MTU5NDA=","name":"hello-world-docker-action-new","full_name":"jacquev6/hello-world-docker-action-new","owner":{"login":"jacquev6","id":9718970,"node_id":"MDQ6VXNlcjk3MTg5NzA=","avatar_url":"https://avatars2.githubusercontent.com/u/9718970?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jacquev6/hello-world-docker-action-new","description":null,"fork":false,"url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new","forks_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/forks","keys_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/teams","hooks_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/hooks","issue_events_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/issues/events{/number}","events_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/events","assignees_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/assignees{/user}","branches_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/branches{/branch}","tags_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/tags","blobs_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/refs{/sha}","trees_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/statuses/{sha}","languages_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/languages","stargazers_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/stargazers","contributors_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/contributors","subscribers_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/subscribers","subscription_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/subscription","commits_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/commits{/sha}","git_commits_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/commits{/sha}","comments_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/comments{/number}","issue_comment_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/issues/comments{/number}","contents_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/contents/{+path}","compare_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/merges","archive_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/downloads","issues_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/issues{/number}","pulls_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/pulls{/number}","milestones_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/milestones{/number}","notifications_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/labels{/name}","releases_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/releases{/id}","deployments_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/deployments","created_at":"2020-02-11T16:56:47Z","updated_at":"2020-02-11T16:56:47Z","pushed_at":"2020-02-11T16:56:48Z","git_url":"git://github.com/jacquev6/hello-world-docker-action-new.git","ssh_url":"git@github.com:jacquev6/hello-world-docker-action-new.git","clone_url":"https://github.com/jacquev6/hello-world-docker-action-new.git","svn_url":"https://github.com/jacquev6/hello-world-docker-action-new","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master","permissions":{"pull":true,"push":true,"admin":true},"is_template":false,"template_repository":{"id":200448202,"node_id":"MDEwOlJlcG9zaXRvcnkyMDA0NDgyMDI=","name":"hello-world-docker-action","full_name":"actions/hello-world-docker-action","owner":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/actions/hello-world-docker-action","description":"A template to demonstrate how to build a Docker action.","fork":false,"url":"https://api.github.com/repos/actions/hello-world-docker-action","forks_url":"https://api.github.com/repos/actions/hello-world-docker-action/forks","keys_url":"https://api.github.com/repos/actions/hello-world-docker-action/keys{/key_id}","collaborators_url":"https://api.github.com/repos/actions/hello-world-docker-action/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/actions/hello-world-docker-action/teams","hooks_url":"https://api.github.com/repos/actions/hello-world-docker-action/hooks","issue_events_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/events{/number}","events_url":"https://api.github.com/repos/actions/hello-world-docker-action/events","assignees_url":"https://api.github.com/repos/actions/hello-world-docker-action/assignees{/user}","branches_url":"https://api.github.com/repos/actions/hello-world-docker-action/branches{/branch}","tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/tags","blobs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/refs{/sha}","trees_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/trees{/sha}","statuses_url":"https://api.github.com/repos/actions/hello-world-docker-action/statuses/{sha}","languages_url":"https://api.github.com/repos/actions/hello-world-docker-action/languages","stargazers_url":"https://api.github.com/repos/actions/hello-world-docker-action/stargazers","contributors_url":"https://api.github.com/repos/actions/hello-world-docker-action/contributors","subscribers_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscribers","subscription_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscription","commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/commits{/sha}","git_commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/commits{/sha}","comments_url":"https://api.github.com/repos/actions/hello-world-docker-action/comments{/number}","issue_comment_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/comments{/number}","contents_url":"https://api.github.com/repos/actions/hello-world-docker-action/contents/{+path}","compare_url":"https://api.github.com/repos/actions/hello-world-docker-action/compare/{base}...{head}","merges_url":"https://api.github.com/repos/actions/hello-world-docker-action/merges","archive_url":"https://api.github.com/repos/actions/hello-world-docker-action/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/actions/hello-world-docker-action/downloads","issues_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues{/number}","pulls_url":"https://api.github.com/repos/actions/hello-world-docker-action/pulls{/number}","milestones_url":"https://api.github.com/repos/actions/hello-world-docker-action/milestones{/number}","notifications_url":"https://api.github.com/repos/actions/hello-world-docker-action/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/actions/hello-world-docker-action/labels{/name}","releases_url":"https://api.github.com/repos/actions/hello-world-docker-action/releases{/id}","deployments_url":"https://api.github.com/repos/actions/hello-world-docker-action/deployments","created_at":"2019-08-04T04:10:12Z","updated_at":"2020-02-07T09:28:27Z","pushed_at":"2020-01-17T19:48:23Z","git_url":"git://github.com/actions/hello-world-docker-action.git","ssh_url":"git@github.com:actions/hello-world-docker-action.git","clone_url":"https://github.com/actions/hello-world-docker-action.git","svn_url":"https://github.com/actions/hello-world-docker-action","homepage":"https://help.github.com/en/articles/creating-a-docker-container-action","size":11,"stargazers_count":26,"watchers_count":26,"language":"Dockerfile","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":30,"open_issues":1,"watchers":26,"default_branch":"master","permissions":{"pull":true,"push":false,"admin":false},"is_template":true},"subscribers_count":1,"network_count":1} + diff --git a/tests/ReplayData/AuthenticatedUser.testCreateRepoFromTemplateWithAllArguments.txt b/tests/ReplayData/AuthenticatedUser.testCreateRepoFromTemplateWithAllArguments.txt new file mode 100644 index 0000000000..c150a5773a --- /dev/null +++ b/tests/ReplayData/AuthenticatedUser.testCreateRepoFromTemplateWithAllArguments.txt @@ -0,0 +1,33 @@ +https +GET +api.github.com +None +/repos/actions/hello-world-docker-action +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Tue, 11 Feb 2020 19:18:56 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1581452316'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept'), ('ETag', 'W/"63c75e6c241c8aa34fa31eaac3091d88"'), ('Last-Modified', 'Fri, 07 Feb 2020 09:28:27 GMT'), ('X-OAuth-Scopes', 'public_repo, read:org, read:user, user:email'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '1; mode=block'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', '1BD6:14E8:BA6CC:1C4CAD:5E42FE20')] +{"id":200448202,"node_id":"MDEwOlJlcG9zaXRvcnkyMDA0NDgyMDI=","name":"hello-world-docker-action","full_name":"actions/hello-world-docker-action","private":false,"owner":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/actions/hello-world-docker-action","description":"A template to demonstrate how to build a Docker action.","fork":false,"url":"https://api.github.com/repos/actions/hello-world-docker-action","forks_url":"https://api.github.com/repos/actions/hello-world-docker-action/forks","keys_url":"https://api.github.com/repos/actions/hello-world-docker-action/keys{/key_id}","collaborators_url":"https://api.github.com/repos/actions/hello-world-docker-action/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/actions/hello-world-docker-action/teams","hooks_url":"https://api.github.com/repos/actions/hello-world-docker-action/hooks","issue_events_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/events{/number}","events_url":"https://api.github.com/repos/actions/hello-world-docker-action/events","assignees_url":"https://api.github.com/repos/actions/hello-world-docker-action/assignees{/user}","branches_url":"https://api.github.com/repos/actions/hello-world-docker-action/branches{/branch}","tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/tags","blobs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/refs{/sha}","trees_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/trees{/sha}","statuses_url":"https://api.github.com/repos/actions/hello-world-docker-action/statuses/{sha}","languages_url":"https://api.github.com/repos/actions/hello-world-docker-action/languages","stargazers_url":"https://api.github.com/repos/actions/hello-world-docker-action/stargazers","contributors_url":"https://api.github.com/repos/actions/hello-world-docker-action/contributors","subscribers_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscribers","subscription_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscription","commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/commits{/sha}","git_commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/commits{/sha}","comments_url":"https://api.github.com/repos/actions/hello-world-docker-action/comments{/number}","issue_comment_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/comments{/number}","contents_url":"https://api.github.com/repos/actions/hello-world-docker-action/contents/{+path}","compare_url":"https://api.github.com/repos/actions/hello-world-docker-action/compare/{base}...{head}","merges_url":"https://api.github.com/repos/actions/hello-world-docker-action/merges","archive_url":"https://api.github.com/repos/actions/hello-world-docker-action/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/actions/hello-world-docker-action/downloads","issues_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues{/number}","pulls_url":"https://api.github.com/repos/actions/hello-world-docker-action/pulls{/number}","milestones_url":"https://api.github.com/repos/actions/hello-world-docker-action/milestones{/number}","notifications_url":"https://api.github.com/repos/actions/hello-world-docker-action/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/actions/hello-world-docker-action/labels{/name}","releases_url":"https://api.github.com/repos/actions/hello-world-docker-action/releases{/id}","deployments_url":"https://api.github.com/repos/actions/hello-world-docker-action/deployments","created_at":"2019-08-04T04:10:12Z","updated_at":"2020-02-07T09:28:27Z","pushed_at":"2020-01-17T19:48:23Z","git_url":"git://github.com/actions/hello-world-docker-action.git","ssh_url":"git@github.com:actions/hello-world-docker-action.git","clone_url":"https://github.com/actions/hello-world-docker-action.git","svn_url":"https://github.com/actions/hello-world-docker-action","homepage":"https://help.github.com/en/articles/creating-a-docker-container-action","size":11,"stargazers_count":26,"watchers_count":26,"language":"Dockerfile","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":30,"open_issues":1,"watchers":26,"default_branch":"master","permissions":{"admin":false,"push":false,"pull":true},"temp_clone_token":"","organization":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"network_count":30,"subscribers_count":1} + +https +GET +api.github.com +None +/user +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"79f748546e5fc4492505a70de6542183"'), ('date', 'Tue, 08 May 2012 09:51:20 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"public_repos":10,"type":"User","url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","followers":13,"bio":"","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","disk_usage":16692,"plan":{"private_repos":5,"space":614400,"name":"micro","collaborators":1},"html_url":"https://github.com/jacquev6","blog":"http://vincent-jacques.net","login":"jacquev6","email":"vincent@vincent-jacques.net","created_at":"2010-07-09T06:10:06Z","company":"Criteo","location":"Paris, France","total_private_repos":5,"public_gists":1,"following":24,"name":"Vincent Jacques","id":327146,"owned_private_repos":5,"private_gists":5,"collaborators":0,"hireable":false,"node_id":"MDQ6VXNlcjMyNzE0Ng=="} + +https +POST +api.github.com +None +/repos/actions/hello-world-docker-action/generate +{'Accept': 'application/vnd.github.v3+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"name": "hello-world-docker-action-new", "owner": "jacquev6", "description": "My repo from template", "private": true} +201 +[('Server', 'GitHub.com'), ('Date', 'Tue, 11 Feb 2020 19:18:59 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '11794'), ('Status', '201 Created'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4994'), ('X-RateLimit-Reset', '1581452316'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept'), ('ETag', '"7fe9f51a711de4ffab9b930e33e3d875"'), ('X-OAuth-Scopes', 'public_repo, read:org, read:user, user:email'), ('X-Accepted-OAuth-Scopes', ''), ('Location', 'https://api.github.com/repos/jacquev6/hello-world-docker-action-new'), ('X-GitHub-Media-Type', 'github.baptiste-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '1; mode=block'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('X-GitHub-Request-Id', '3FB4:2492:632B7:FC388:5E42FE21')] +{"id":239844699,"node_id":"MDEwOlJlcG9zaXRvcnkyMzk4NDQ2OTk=","name":"hello-world-docker-action-new","full_name":"jacquev6/hello-world-docker-action-new","owner":{"login":"jacquev6","id":9718970,"node_id":"MDQ6VXNlcjk3MTg5NzA=","avatar_url":"https://avatars2.githubusercontent.com/u/9718970?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","site_admin":false},"private":true,"html_url":"https://github.com/jacquev6/hello-world-docker-action-new","description":"My repo from template","fork":false,"url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new","forks_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/forks","keys_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/teams","hooks_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/hooks","issue_events_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/issues/events{/number}","events_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/events","assignees_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/assignees{/user}","branches_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/branches{/branch}","tags_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/tags","blobs_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/refs{/sha}","trees_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/statuses/{sha}","languages_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/languages","stargazers_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/stargazers","contributors_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/contributors","subscribers_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/subscribers","subscription_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/subscription","commits_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/commits{/sha}","git_commits_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/git/commits{/sha}","comments_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/comments{/number}","issue_comment_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/issues/comments{/number}","contents_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/contents/{+path}","compare_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/merges","archive_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/downloads","issues_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/issues{/number}","pulls_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/pulls{/number}","milestones_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/milestones{/number}","notifications_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/labels{/name}","releases_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/releases{/id}","deployments_url":"https://api.github.com/repos/jacquev6/hello-world-docker-action-new/deployments","created_at":"2020-02-11T19:18:57Z","updated_at":"2020-02-11T19:18:57Z","pushed_at":"2020-02-11T19:18:59Z","git_url":"git://github.com/jacquev6/hello-world-docker-action-new.git","ssh_url":"git@github.com:jacquev6/hello-world-docker-action-new.git","clone_url":"https://github.com/jacquev6/hello-world-docker-action-new.git","svn_url":"https://github.com/jacquev6/hello-world-docker-action-new","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master","permissions":{"pull":true,"push":true,"admin":true},"is_template":false,"template_repository":{"id":200448202,"node_id":"MDEwOlJlcG9zaXRvcnkyMDA0NDgyMDI=","name":"hello-world-docker-action","full_name":"actions/hello-world-docker-action","owner":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/actions/hello-world-docker-action","description":"A template to demonstrate how to build a Docker action.","fork":false,"url":"https://api.github.com/repos/actions/hello-world-docker-action","forks_url":"https://api.github.com/repos/actions/hello-world-docker-action/forks","keys_url":"https://api.github.com/repos/actions/hello-world-docker-action/keys{/key_id}","collaborators_url":"https://api.github.com/repos/actions/hello-world-docker-action/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/actions/hello-world-docker-action/teams","hooks_url":"https://api.github.com/repos/actions/hello-world-docker-action/hooks","issue_events_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/events{/number}","events_url":"https://api.github.com/repos/actions/hello-world-docker-action/events","assignees_url":"https://api.github.com/repos/actions/hello-world-docker-action/assignees{/user}","branches_url":"https://api.github.com/repos/actions/hello-world-docker-action/branches{/branch}","tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/tags","blobs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/refs{/sha}","trees_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/trees{/sha}","statuses_url":"https://api.github.com/repos/actions/hello-world-docker-action/statuses/{sha}","languages_url":"https://api.github.com/repos/actions/hello-world-docker-action/languages","stargazers_url":"https://api.github.com/repos/actions/hello-world-docker-action/stargazers","contributors_url":"https://api.github.com/repos/actions/hello-world-docker-action/contributors","subscribers_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscribers","subscription_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscription","commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/commits{/sha}","git_commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/commits{/sha}","comments_url":"https://api.github.com/repos/actions/hello-world-docker-action/comments{/number}","issue_comment_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/comments{/number}","contents_url":"https://api.github.com/repos/actions/hello-world-docker-action/contents/{+path}","compare_url":"https://api.github.com/repos/actions/hello-world-docker-action/compare/{base}...{head}","merges_url":"https://api.github.com/repos/actions/hello-world-docker-action/merges","archive_url":"https://api.github.com/repos/actions/hello-world-docker-action/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/actions/hello-world-docker-action/downloads","issues_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues{/number}","pulls_url":"https://api.github.com/repos/actions/hello-world-docker-action/pulls{/number}","milestones_url":"https://api.github.com/repos/actions/hello-world-docker-action/milestones{/number}","notifications_url":"https://api.github.com/repos/actions/hello-world-docker-action/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/actions/hello-world-docker-action/labels{/name}","releases_url":"https://api.github.com/repos/actions/hello-world-docker-action/releases{/id}","deployments_url":"https://api.github.com/repos/actions/hello-world-docker-action/deployments","created_at":"2019-08-04T04:10:12Z","updated_at":"2020-02-07T09:28:27Z","pushed_at":"2020-01-17T19:48:23Z","git_url":"git://github.com/actions/hello-world-docker-action.git","ssh_url":"git@github.com:actions/hello-world-docker-action.git","clone_url":"https://github.com/actions/hello-world-docker-action.git","svn_url":"https://github.com/actions/hello-world-docker-action","homepage":"https://help.github.com/en/articles/creating-a-docker-container-action","size":11,"stargazers_count":26,"watchers_count":26,"language":"Dockerfile","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":30,"open_issues":1,"watchers":26,"default_branch":"master","permissions":{"pull":true,"push":false,"admin":false},"is_template":true},"subscribers_count":1,"network_count":1} + diff --git a/tests/ReplayData/Organization.testCreateRepoFromTemplate.txt b/tests/ReplayData/Organization.testCreateRepoFromTemplate.txt new file mode 100644 index 0000000000..95846f8a67 --- /dev/null +++ b/tests/ReplayData/Organization.testCreateRepoFromTemplate.txt @@ -0,0 +1,22 @@ +https +GET +api.github.com +None +/repos/actions/hello-world-docker-action +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Wed, 12 Feb 2020 13:54:27 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1581519266'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept'), ('ETag', 'W/"63c75e6c241c8aa34fa31eaac3091d88"'), ('Last-Modified', 'Fri, 07 Feb 2020 09:28:27 GMT'), ('X-OAuth-Scopes', 'public_repo, read:org, read:user, user:email'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '1; mode=block'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', '4A6A:20CC:7983B:E89EF:5E440392')] +{"id":200448202,"node_id":"MDEwOlJlcG9zaXRvcnkyMDA0NDgyMDI=","name":"hello-world-docker-action","full_name":"actions/hello-world-docker-action","private":false,"owner":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/actions/hello-world-docker-action","description":"A template to demonstrate how to build a Docker action.","fork":false,"url":"https://api.github.com/repos/actions/hello-world-docker-action","forks_url":"https://api.github.com/repos/actions/hello-world-docker-action/forks","keys_url":"https://api.github.com/repos/actions/hello-world-docker-action/keys{/key_id}","collaborators_url":"https://api.github.com/repos/actions/hello-world-docker-action/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/actions/hello-world-docker-action/teams","hooks_url":"https://api.github.com/repos/actions/hello-world-docker-action/hooks","issue_events_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/events{/number}","events_url":"https://api.github.com/repos/actions/hello-world-docker-action/events","assignees_url":"https://api.github.com/repos/actions/hello-world-docker-action/assignees{/user}","branches_url":"https://api.github.com/repos/actions/hello-world-docker-action/branches{/branch}","tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/tags","blobs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/refs{/sha}","trees_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/trees{/sha}","statuses_url":"https://api.github.com/repos/actions/hello-world-docker-action/statuses/{sha}","languages_url":"https://api.github.com/repos/actions/hello-world-docker-action/languages","stargazers_url":"https://api.github.com/repos/actions/hello-world-docker-action/stargazers","contributors_url":"https://api.github.com/repos/actions/hello-world-docker-action/contributors","subscribers_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscribers","subscription_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscription","commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/commits{/sha}","git_commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/commits{/sha}","comments_url":"https://api.github.com/repos/actions/hello-world-docker-action/comments{/number}","issue_comment_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/comments{/number}","contents_url":"https://api.github.com/repos/actions/hello-world-docker-action/contents/{+path}","compare_url":"https://api.github.com/repos/actions/hello-world-docker-action/compare/{base}...{head}","merges_url":"https://api.github.com/repos/actions/hello-world-docker-action/merges","archive_url":"https://api.github.com/repos/actions/hello-world-docker-action/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/actions/hello-world-docker-action/downloads","issues_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues{/number}","pulls_url":"https://api.github.com/repos/actions/hello-world-docker-action/pulls{/number}","milestones_url":"https://api.github.com/repos/actions/hello-world-docker-action/milestones{/number}","notifications_url":"https://api.github.com/repos/actions/hello-world-docker-action/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/actions/hello-world-docker-action/labels{/name}","releases_url":"https://api.github.com/repos/actions/hello-world-docker-action/releases{/id}","deployments_url":"https://api.github.com/repos/actions/hello-world-docker-action/deployments","created_at":"2019-08-04T04:10:12Z","updated_at":"2020-02-07T09:28:27Z","pushed_at":"2020-01-17T19:48:23Z","git_url":"git://github.com/actions/hello-world-docker-action.git","ssh_url":"git@github.com:actions/hello-world-docker-action.git","clone_url":"https://github.com/actions/hello-world-docker-action.git","svn_url":"https://github.com/actions/hello-world-docker-action","homepage":"https://help.github.com/en/articles/creating-a-docker-container-action","size":11,"stargazers_count":26,"watchers_count":26,"language":"Dockerfile","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":30,"open_issues":1,"watchers":26,"default_branch":"master","permissions":{"admin":false,"push":false,"pull":true},"temp_clone_token":"","organization":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"network_count":30,"subscribers_count":1} + +https +POST +api.github.com +None +/repos/actions/hello-world-docker-action/generate +{'Accept': 'application/vnd.github.v3+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"name": "hello-world-docker-action-new", "owner": "BeaverSoftware"} +201 +[('Server', 'GitHub.com'), ('Date', 'Wed, 12 Feb 2020 13:54:29 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '12600'), ('Status', '201 Created'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4997'), ('X-RateLimit-Reset', '1581519266'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept'), ('ETag', '"36abdc4630fb044196d6efbfc0f644e0"'), ('X-OAuth-Scopes', 'public_repo, read:org, read:user, user:email'), ('X-Accepted-OAuth-Scopes', ''), ('Location', 'https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new'), ('X-GitHub-Media-Type', 'github.baptiste-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '1; mode=block'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('X-GitHub-Request-Id', '8C3C:2BF7:ACD4:17C45:5E440393')] +{"id":240025159,"node_id":"MDEwOlJlcG9zaXRvcnkyNDAwMjUxNTk=","name":"hello-world-docker-action-new","full_name":"BeaverSoftware/hello-world-docker-action-new","owner":{"login":"BeaverSoftware","id":60894054,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYwODk0MDU0","avatar_url":"https://avatars2.githubusercontent.com/u/60894054?v=4","gravatar_id":"","url":"https://api.github.com/users/BeaverSoftware","html_url":"https://github.com/BeaverSoftware","followers_url":"https://api.github.com/users/BeaverSoftware/followers","following_url":"https://api.github.com/users/BeaverSoftware/following{/other_user}","gists_url":"https://api.github.com/users/BeaverSoftware/gists{/gist_id}","starred_url":"https://api.github.com/users/BeaverSoftware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BeaverSoftware/subscriptions","organizations_url":"https://api.github.com/users/BeaverSoftware/orgs","repos_url":"https://api.github.com/users/BeaverSoftware/repos","events_url":"https://api.github.com/users/BeaverSoftware/events{/privacy}","received_events_url":"https://api.github.com/users/BeaverSoftware/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/BeaverSoftware/hello-world-docker-action-new","description":null,"fork":false,"url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new","forks_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/forks","keys_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/keys{/key_id}","collaborators_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/teams","hooks_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/hooks","issue_events_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/issues/events{/number}","events_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/events","assignees_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/assignees{/user}","branches_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/branches{/branch}","tags_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/tags","blobs_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/refs{/sha}","trees_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/trees{/sha}","statuses_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/statuses/{sha}","languages_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/languages","stargazers_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/stargazers","contributors_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/contributors","subscribers_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/subscribers","subscription_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/subscription","commits_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/commits{/sha}","git_commits_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/commits{/sha}","comments_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/comments{/number}","issue_comment_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/issues/comments{/number}","contents_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/contents/{+path}","compare_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/compare/{base}...{head}","merges_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/merges","archive_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/downloads","issues_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/issues{/number}","pulls_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/pulls{/number}","milestones_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/milestones{/number}","notifications_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/labels{/name}","releases_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/releases{/id}","deployments_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/deployments","created_at":"2020-02-12T13:54:28Z","updated_at":"2020-02-12T13:54:28Z","pushed_at":"2020-02-12T13:54:29Z","git_url":"git://github.com/BeaverSoftware/hello-world-docker-action-new.git","ssh_url":"git@github.com:BeaverSoftware/hello-world-docker-action-new.git","clone_url":"https://github.com/BeaverSoftware/hello-world-docker-action-new.git","svn_url":"https://github.com/BeaverSoftware/hello-world-docker-action-new","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master","permissions":{"pull":true,"push":true,"admin":true},"is_template":false,"template_repository":{"id":200448202,"node_id":"MDEwOlJlcG9zaXRvcnkyMDA0NDgyMDI=","name":"hello-world-docker-action","full_name":"actions/hello-world-docker-action","owner":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/actions/hello-world-docker-action","description":"A template to demonstrate how to build a Docker action.","fork":false,"url":"https://api.github.com/repos/actions/hello-world-docker-action","forks_url":"https://api.github.com/repos/actions/hello-world-docker-action/forks","keys_url":"https://api.github.com/repos/actions/hello-world-docker-action/keys{/key_id}","collaborators_url":"https://api.github.com/repos/actions/hello-world-docker-action/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/actions/hello-world-docker-action/teams","hooks_url":"https://api.github.com/repos/actions/hello-world-docker-action/hooks","issue_events_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/events{/number}","events_url":"https://api.github.com/repos/actions/hello-world-docker-action/events","assignees_url":"https://api.github.com/repos/actions/hello-world-docker-action/assignees{/user}","branches_url":"https://api.github.com/repos/actions/hello-world-docker-action/branches{/branch}","tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/tags","blobs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/refs{/sha}","trees_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/trees{/sha}","statuses_url":"https://api.github.com/repos/actions/hello-world-docker-action/statuses/{sha}","languages_url":"https://api.github.com/repos/actions/hello-world-docker-action/languages","stargazers_url":"https://api.github.com/repos/actions/hello-world-docker-action/stargazers","contributors_url":"https://api.github.com/repos/actions/hello-world-docker-action/contributors","subscribers_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscribers","subscription_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscription","commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/commits{/sha}","git_commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/commits{/sha}","comments_url":"https://api.github.com/repos/actions/hello-world-docker-action/comments{/number}","issue_comment_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/comments{/number}","contents_url":"https://api.github.com/repos/actions/hello-world-docker-action/contents/{+path}","compare_url":"https://api.github.com/repos/actions/hello-world-docker-action/compare/{base}...{head}","merges_url":"https://api.github.com/repos/actions/hello-world-docker-action/merges","archive_url":"https://api.github.com/repos/actions/hello-world-docker-action/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/actions/hello-world-docker-action/downloads","issues_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues{/number}","pulls_url":"https://api.github.com/repos/actions/hello-world-docker-action/pulls{/number}","milestones_url":"https://api.github.com/repos/actions/hello-world-docker-action/milestones{/number}","notifications_url":"https://api.github.com/repos/actions/hello-world-docker-action/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/actions/hello-world-docker-action/labels{/name}","releases_url":"https://api.github.com/repos/actions/hello-world-docker-action/releases{/id}","deployments_url":"https://api.github.com/repos/actions/hello-world-docker-action/deployments","created_at":"2019-08-04T04:10:12Z","updated_at":"2020-02-07T09:28:27Z","pushed_at":"2020-01-17T19:48:23Z","git_url":"git://github.com/actions/hello-world-docker-action.git","ssh_url":"git@github.com:actions/hello-world-docker-action.git","clone_url":"https://github.com/actions/hello-world-docker-action.git","svn_url":"https://github.com/actions/hello-world-docker-action","homepage":"https://help.github.com/en/articles/creating-a-docker-container-action","size":11,"stargazers_count":26,"watchers_count":26,"language":"Dockerfile","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":30,"open_issues":1,"watchers":26,"default_branch":"master","permissions":{"pull":true,"push":false,"admin":false},"is_template":true},"organization":{"login":"BeaverSoftware","id":60894054,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYwODk0MDU0","avatar_url":"https://avatars2.githubusercontent.com/u/60894054?v=4","gravatar_id":"","url":"https://api.github.com/users/BeaverSoftware","html_url":"https://github.com/BeaverSoftware","followers_url":"https://api.github.com/users/BeaverSoftware/followers","following_url":"https://api.github.com/users/BeaverSoftware/following{/other_user}","gists_url":"https://api.github.com/users/BeaverSoftware/gists{/gist_id}","starred_url":"https://api.github.com/users/BeaverSoftware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BeaverSoftware/subscriptions","organizations_url":"https://api.github.com/users/BeaverSoftware/orgs","repos_url":"https://api.github.com/users/BeaverSoftware/repos","events_url":"https://api.github.com/users/BeaverSoftware/events{/privacy}","received_events_url":"https://api.github.com/users/BeaverSoftware/received_events","type":"Organization","site_admin":false},"subscribers_count":0,"network_count":1} + diff --git a/tests/ReplayData/Organization.testCreateRepoFromTemplateWithAllArguments.txt b/tests/ReplayData/Organization.testCreateRepoFromTemplateWithAllArguments.txt new file mode 100644 index 0000000000..210ab41645 --- /dev/null +++ b/tests/ReplayData/Organization.testCreateRepoFromTemplateWithAllArguments.txt @@ -0,0 +1,22 @@ +https +GET +api.github.com +None +/repos/actions/hello-world-docker-action +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Wed, 12 Feb 2020 18:18:10 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4992'), ('X-RateLimit-Reset', '1581534987'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept'), ('ETag', 'W/"63c75e6c241c8aa34fa31eaac3091d88"'), ('Last-Modified', 'Fri, 07 Feb 2020 09:28:27 GMT'), ('X-OAuth-Scopes', 'public_repo, read:org, read:user, user:email'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '1; mode=block'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', '41AB:41D3:1FFAAB:3C0DBC:5E444162')] +{"id":200448202,"node_id":"MDEwOlJlcG9zaXRvcnkyMDA0NDgyMDI=","name":"hello-world-docker-action","full_name":"actions/hello-world-docker-action","private":false,"owner":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/actions/hello-world-docker-action","description":"A template to demonstrate how to build a Docker action.","fork":false,"url":"https://api.github.com/repos/actions/hello-world-docker-action","forks_url":"https://api.github.com/repos/actions/hello-world-docker-action/forks","keys_url":"https://api.github.com/repos/actions/hello-world-docker-action/keys{/key_id}","collaborators_url":"https://api.github.com/repos/actions/hello-world-docker-action/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/actions/hello-world-docker-action/teams","hooks_url":"https://api.github.com/repos/actions/hello-world-docker-action/hooks","issue_events_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/events{/number}","events_url":"https://api.github.com/repos/actions/hello-world-docker-action/events","assignees_url":"https://api.github.com/repos/actions/hello-world-docker-action/assignees{/user}","branches_url":"https://api.github.com/repos/actions/hello-world-docker-action/branches{/branch}","tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/tags","blobs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/refs{/sha}","trees_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/trees{/sha}","statuses_url":"https://api.github.com/repos/actions/hello-world-docker-action/statuses/{sha}","languages_url":"https://api.github.com/repos/actions/hello-world-docker-action/languages","stargazers_url":"https://api.github.com/repos/actions/hello-world-docker-action/stargazers","contributors_url":"https://api.github.com/repos/actions/hello-world-docker-action/contributors","subscribers_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscribers","subscription_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscription","commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/commits{/sha}","git_commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/commits{/sha}","comments_url":"https://api.github.com/repos/actions/hello-world-docker-action/comments{/number}","issue_comment_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/comments{/number}","contents_url":"https://api.github.com/repos/actions/hello-world-docker-action/contents/{+path}","compare_url":"https://api.github.com/repos/actions/hello-world-docker-action/compare/{base}...{head}","merges_url":"https://api.github.com/repos/actions/hello-world-docker-action/merges","archive_url":"https://api.github.com/repos/actions/hello-world-docker-action/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/actions/hello-world-docker-action/downloads","issues_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues{/number}","pulls_url":"https://api.github.com/repos/actions/hello-world-docker-action/pulls{/number}","milestones_url":"https://api.github.com/repos/actions/hello-world-docker-action/milestones{/number}","notifications_url":"https://api.github.com/repos/actions/hello-world-docker-action/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/actions/hello-world-docker-action/labels{/name}","releases_url":"https://api.github.com/repos/actions/hello-world-docker-action/releases{/id}","deployments_url":"https://api.github.com/repos/actions/hello-world-docker-action/deployments","created_at":"2019-08-04T04:10:12Z","updated_at":"2020-02-07T09:28:27Z","pushed_at":"2020-01-17T19:48:23Z","git_url":"git://github.com/actions/hello-world-docker-action.git","ssh_url":"git@github.com:actions/hello-world-docker-action.git","clone_url":"https://github.com/actions/hello-world-docker-action.git","svn_url":"https://github.com/actions/hello-world-docker-action","homepage":"https://help.github.com/en/articles/creating-a-docker-container-action","size":11,"stargazers_count":26,"watchers_count":26,"language":"Dockerfile","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":30,"open_issues":1,"watchers":26,"default_branch":"master","permissions":{"admin":false,"push":false,"pull":true},"temp_clone_token":"","organization":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"network_count":30,"subscribers_count":1} + +https +POST +api.github.com +None +/repos/actions/hello-world-docker-action/generate +{'Accept': 'application/vnd.github.v3+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"name": "hello-world-docker-action-new", "owner": "BeaverSoftware", "description": "My repo from template", "private": true} +201 +[('Server', 'GitHub.com'), ('Date', 'Wed, 12 Feb 2020 18:18:12 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '12619'), ('Status', '201 Created'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1581534987'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept'), ('ETag', '"7ab10890a25b4661a4310dc8dbf4491f"'), ('X-OAuth-Scopes', 'public_repo, read:org, read:user, user:email'), ('X-Accepted-OAuth-Scopes', ''), ('Location', 'https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new'), ('X-GitHub-Media-Type', 'github.baptiste-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '1; mode=block'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('X-GitHub-Request-Id', 'C35C:1792:11E12C:2D04D2:5E444162')] +{"id":240083127,"node_id":"MDEwOlJlcG9zaXRvcnkyNDAwODMxMjc=","name":"hello-world-docker-action-new","full_name":"BeaverSoftware/hello-world-docker-action-new","owner":{"login":"BeaverSoftware","id":60894054,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYwODk0MDU0","avatar_url":"https://avatars2.githubusercontent.com/u/60894054?v=4","gravatar_id":"","url":"https://api.github.com/users/BeaverSoftware","html_url":"https://github.com/BeaverSoftware","followers_url":"https://api.github.com/users/BeaverSoftware/followers","following_url":"https://api.github.com/users/BeaverSoftware/following{/other_user}","gists_url":"https://api.github.com/users/BeaverSoftware/gists{/gist_id}","starred_url":"https://api.github.com/users/BeaverSoftware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BeaverSoftware/subscriptions","organizations_url":"https://api.github.com/users/BeaverSoftware/orgs","repos_url":"https://api.github.com/users/BeaverSoftware/repos","events_url":"https://api.github.com/users/BeaverSoftware/events{/privacy}","received_events_url":"https://api.github.com/users/BeaverSoftware/received_events","type":"Organization","site_admin":false},"private":true,"html_url":"https://github.com/BeaverSoftware/hello-world-docker-action-new","description":"My repo from template","fork":false,"url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new","forks_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/forks","keys_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/keys{/key_id}","collaborators_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/teams","hooks_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/hooks","issue_events_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/issues/events{/number}","events_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/events","assignees_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/assignees{/user}","branches_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/branches{/branch}","tags_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/tags","blobs_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/refs{/sha}","trees_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/trees{/sha}","statuses_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/statuses/{sha}","languages_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/languages","stargazers_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/stargazers","contributors_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/contributors","subscribers_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/subscribers","subscription_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/subscription","commits_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/commits{/sha}","git_commits_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/git/commits{/sha}","comments_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/comments{/number}","issue_comment_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/issues/comments{/number}","contents_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/contents/{+path}","compare_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/compare/{base}...{head}","merges_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/merges","archive_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/downloads","issues_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/issues{/number}","pulls_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/pulls{/number}","milestones_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/milestones{/number}","notifications_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/labels{/name}","releases_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/releases{/id}","deployments_url":"https://api.github.com/repos/BeaverSoftware/hello-world-docker-action-new/deployments","created_at":"2020-02-12T18:18:11Z","updated_at":"2020-02-12T18:18:11Z","pushed_at":"2020-02-12T18:18:12Z","git_url":"git://github.com/BeaverSoftware/hello-world-docker-action-new.git","ssh_url":"git@github.com:BeaverSoftware/hello-world-docker-action-new.git","clone_url":"https://github.com/BeaverSoftware/hello-world-docker-action-new.git","svn_url":"https://github.com/BeaverSoftware/hello-world-docker-action-new","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master","permissions":{"pull":true,"push":true,"admin":true},"is_template":false,"template_repository":{"id":200448202,"node_id":"MDEwOlJlcG9zaXRvcnkyMDA0NDgyMDI=","name":"hello-world-docker-action","full_name":"actions/hello-world-docker-action","owner":{"login":"actions","id":44036562,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0MDM2NTYy","avatar_url":"https://avatars1.githubusercontent.com/u/44036562?v=4","gravatar_id":"","url":"https://api.github.com/users/actions","html_url":"https://github.com/actions","followers_url":"https://api.github.com/users/actions/followers","following_url":"https://api.github.com/users/actions/following{/other_user}","gists_url":"https://api.github.com/users/actions/gists{/gist_id}","starred_url":"https://api.github.com/users/actions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/actions/subscriptions","organizations_url":"https://api.github.com/users/actions/orgs","repos_url":"https://api.github.com/users/actions/repos","events_url":"https://api.github.com/users/actions/events{/privacy}","received_events_url":"https://api.github.com/users/actions/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/actions/hello-world-docker-action","description":"A template to demonstrate how to build a Docker action.","fork":false,"url":"https://api.github.com/repos/actions/hello-world-docker-action","forks_url":"https://api.github.com/repos/actions/hello-world-docker-action/forks","keys_url":"https://api.github.com/repos/actions/hello-world-docker-action/keys{/key_id}","collaborators_url":"https://api.github.com/repos/actions/hello-world-docker-action/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/actions/hello-world-docker-action/teams","hooks_url":"https://api.github.com/repos/actions/hello-world-docker-action/hooks","issue_events_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/events{/number}","events_url":"https://api.github.com/repos/actions/hello-world-docker-action/events","assignees_url":"https://api.github.com/repos/actions/hello-world-docker-action/assignees{/user}","branches_url":"https://api.github.com/repos/actions/hello-world-docker-action/branches{/branch}","tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/tags","blobs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/refs{/sha}","trees_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/trees{/sha}","statuses_url":"https://api.github.com/repos/actions/hello-world-docker-action/statuses/{sha}","languages_url":"https://api.github.com/repos/actions/hello-world-docker-action/languages","stargazers_url":"https://api.github.com/repos/actions/hello-world-docker-action/stargazers","contributors_url":"https://api.github.com/repos/actions/hello-world-docker-action/contributors","subscribers_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscribers","subscription_url":"https://api.github.com/repos/actions/hello-world-docker-action/subscription","commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/commits{/sha}","git_commits_url":"https://api.github.com/repos/actions/hello-world-docker-action/git/commits{/sha}","comments_url":"https://api.github.com/repos/actions/hello-world-docker-action/comments{/number}","issue_comment_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues/comments{/number}","contents_url":"https://api.github.com/repos/actions/hello-world-docker-action/contents/{+path}","compare_url":"https://api.github.com/repos/actions/hello-world-docker-action/compare/{base}...{head}","merges_url":"https://api.github.com/repos/actions/hello-world-docker-action/merges","archive_url":"https://api.github.com/repos/actions/hello-world-docker-action/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/actions/hello-world-docker-action/downloads","issues_url":"https://api.github.com/repos/actions/hello-world-docker-action/issues{/number}","pulls_url":"https://api.github.com/repos/actions/hello-world-docker-action/pulls{/number}","milestones_url":"https://api.github.com/repos/actions/hello-world-docker-action/milestones{/number}","notifications_url":"https://api.github.com/repos/actions/hello-world-docker-action/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/actions/hello-world-docker-action/labels{/name}","releases_url":"https://api.github.com/repos/actions/hello-world-docker-action/releases{/id}","deployments_url":"https://api.github.com/repos/actions/hello-world-docker-action/deployments","created_at":"2019-08-04T04:10:12Z","updated_at":"2020-02-07T09:28:27Z","pushed_at":"2020-01-17T19:48:23Z","git_url":"git://github.com/actions/hello-world-docker-action.git","ssh_url":"git@github.com:actions/hello-world-docker-action.git","clone_url":"https://github.com/actions/hello-world-docker-action.git","svn_url":"https://github.com/actions/hello-world-docker-action","homepage":"https://help.github.com/en/articles/creating-a-docker-container-action","size":11,"stargazers_count":26,"watchers_count":26,"language":"Dockerfile","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":30,"open_issues":1,"watchers":26,"default_branch":"master","permissions":{"pull":true,"push":false,"admin":false},"is_template":true},"organization":{"login":"BeaverSoftware","id":60894054,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYwODk0MDU0","avatar_url":"https://avatars2.githubusercontent.com/u/60894054?v=4","gravatar_id":"","url":"https://api.github.com/users/BeaverSoftware","html_url":"https://github.com/BeaverSoftware","followers_url":"https://api.github.com/users/BeaverSoftware/followers","following_url":"https://api.github.com/users/BeaverSoftware/following{/other_user}","gists_url":"https://api.github.com/users/BeaverSoftware/gists{/gist_id}","starred_url":"https://api.github.com/users/BeaverSoftware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BeaverSoftware/subscriptions","organizations_url":"https://api.github.com/users/BeaverSoftware/orgs","repos_url":"https://api.github.com/users/BeaverSoftware/repos","events_url":"https://api.github.com/users/BeaverSoftware/events{/privacy}","received_events_url":"https://api.github.com/users/BeaverSoftware/received_events","type":"Organization","site_admin":false},"subscribers_count":0,"network_count":1} + diff --git a/tests/Repository.py b/tests/Repository.py index 6c39b63a8e..74f1b05e38 100644 --- a/tests/Repository.py +++ b/tests/Repository.py @@ -89,6 +89,7 @@ def testAttributes(self): self.assertEqual(self.repo.homepage, "http://vincent-jacques.net/PyGithub") self.assertEqual(self.repo.html_url, "https://github.com/jacquev6/PyGithub") self.assertEqual(self.repo.id, 3544490) + self.assertIs(self.repo.is_template, None) self.assertEqual(self.repo.language, "Python") self.assertEqual(self.repo.master_branch, None) self.assertEqual(self.repo.name, "PyGithub") From c677ced98d157e98015ef85644f8f465af2fa3a3 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Thu, 13 Oct 2022 09:23:01 +0800 Subject: [PATCH 03/32] Publish version 1.56 --- doc/changes.rst | 31 +++++++++++++++++++++++++++++++ setup.py | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/doc/changes.rst b/doc/changes.rst index b87f51a18a..0c18c95ce4 100644 --- a/doc/changes.rst +++ b/doc/changes.rst @@ -4,6 +4,37 @@ Change log Stable versions ~~~~~~~~~~~~~~~ +Version 1.56 (October 13, 2022) +----------------------------------- + +**Important** + +This is the last release that will support Python 3.6. + +**Bug Fixes & Improvements** + +* Create repo from template (#2090) (b50283a7) +* Improve signature of Repository.create_repo (#2118) (001970d4) +* Add support for 'visibility' attribute preview for Repositories (#1872) (8d1397af) +* Add Repository.rename_branch method (#2089) (6452ddfe) +* Add function to delete pending reviews on a pull request (#1897) (c8a945bb) +* Cover all code paths in search_commits (#2087) (f1faf941) +* Correctly deal when PaginatedList's data is a dict (#2084) (93b92cd2) +* Add two_factor_authentication in AuthenticatedUser. (#1972) (4f00cbf2) +* Add ProjectCard.edit() to the type stub (#2080) (d417e4c4) +* Add method to delete Workflow runs (#2078) (b1c8eec5) +* Implement organization.cancel_invitation() (#2072) (53fb4988) +* Feat: Add `html_url` property in Team Class. (#1983) (6570892a) +* Add support for Python 3.10 (#2073) (aa694f8e) +* Add github actions secrets to org (#2006) (bc5e5950) +* Correct replay for Organization.create_project() test (#2075) (fcc12368) +* Fix install command example (#2043) (99e00a28) +* Fix: #1671 Convert Python Bool to API Parameter for Authenticated User Notifications (#2001) (1da600a3) +* Do not transform requestHeaders when logging (#1965) (1265747e) +* Add type to OrderedDict (#1954) (ed7d0fe9) +* Add Commit.get_pulls() to pyi (#1958) (b4664705) +* Adding headers in GithubException is a breaking change (#1931) (d1644e33) + Version 1.55 (April 26, 2021) ----------------------------------- **Breaking Changes** diff --git a/setup.py b/setup.py index 67d876e2e4..0517f02f0f 100755 --- a/setup.py +++ b/setup.py @@ -44,7 +44,7 @@ import setuptools -version = "1.55" +version = "1.56" if __name__ == "__main__": From 7d3c3f083d5d962efdfe2bb240d296d274c14405 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Thu, 13 Oct 2022 14:35:43 +0800 Subject: [PATCH 04/32] Relax stale to 180 days (#2331) --- .github/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/stale.yml b/.github/stale.yml index 1d1982a3f5..c06c0a9d1b 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -1,7 +1,7 @@ # Configuration for probot-stale - https://github.com/probot/stale # Number of days of inactivity before an Issue or Pull Request becomes stale -daysUntilStale: 60 +daysUntilStale: 180 # Number of days of inactivity before a stale Issue or Pull Request is closed. # Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. From 1e2f10dcb2ad2656661e851e66f44d0bf9fb924a Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 25 Oct 2022 05:51:28 +0300 Subject: [PATCH 05/32] Add support for Python 3.11, drop EOL 3.6 (#2332) --- .github/workflows/ci.yml | 2 +- .pre-commit-config.yaml | 2 +- CONTRIBUTING.md | 2 +- setup.py | 4 ++-- tox.ini | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f71b698f1..20137ef827 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ jobs: name: test (Python ${{ matrix.python-version }}) strategy: matrix: - python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] + python-version: ["3.7", "3.8", "3.9", "3.10", "3.11-dev"] steps: - uses: actions/checkout@v2 - name: Set up Python diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1dea2b1aff..489427758f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,4 +28,4 @@ repos: hooks: - id: pyupgrade args: - - --py36-plus + - --py37-plus diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 235cd0db41..b256ee320d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -106,7 +106,7 @@ You may also want to investigate `tox` to run tests: ``` pip install tox -tox -epy36 +tox -epy310 ``` ## Build documentation locally diff --git a/setup.py b/setup.py index 0517f02f0f..acd8c328c0 100755 --- a/setup.py +++ b/setup.py @@ -96,14 +96,14 @@ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Topic :: Software Development", ], - python_requires=">=3.6", + python_requires=">=3.7", install_requires=[ "deprecated", "pyjwt>=2.0", diff --git a/tox.ini b/tox.ini index ab2c294832..f4346521c9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,16 +1,16 @@ [tox] envlist = lint, - py{36,37,38,39,310}, + py{37,38,39,310,311}, docs [gh-actions] python = - 3.6: py36 3.7: py37 3.8: py38, docs, lint 3.9: py39 3.10: py310 + 3.11: py311 [testenv] deps = -rtest-requirements.txt From 17b44d88573e0c1772aefa5c7a4d2ef4801ff713 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Tue, 25 Oct 2022 10:57:03 +0800 Subject: [PATCH 06/32] Fix typo in blame ignore revs (#2342) --- .git-blame-ignore-revs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 89ca110b2a..023ce4ec95 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -10,5 +10,5 @@ # Add pyupgrade to pre-commit e113e37de1ec687c68337d777f3629251b35ab28 -Run pre-commit autoupdate and run all hooks +# Run pre-commit autoupdate and run all hooks 4c24c73d34b54a061b0c800eeea64dc64c230a63 From 437ff8452a709e1e84c8fb80feca6d1a7f986cce Mon Sep 17 00:00:00 2001 From: Aleksei Fedotov Date: Tue, 25 Oct 2022 05:02:33 +0200 Subject: [PATCH 07/32] Add class Artifact (#2313) (#2319) Co-authored-by: Aleksei Fedotov --- github/Artifact.py | 178 ++++++++++++++++++ github/Artifact.pyi | 30 +++ github/Repository.py | 29 +++ github/Repository.pyi | 3 + github/WorkflowRun.py | 11 ++ tests/Artifact.py | 60 ++++++ tests/ReplayData/Artifact.setUp.txt | 11 ++ tests/ReplayData/Artifact.testDelete.txt | 44 +++++ .../Artifact.testGetArtifactsFromRepo.txt | 11 ++ .../Artifact.testGetArtifactsFromWorkflow.txt | 22 +++ .../Artifact.testGetNonexistentArtifact.txt | 22 +++ ...Artifact.testGetSingleArtifactFromRepo.txt | 11 ++ 12 files changed, 432 insertions(+) create mode 100644 github/Artifact.py create mode 100644 github/Artifact.pyi create mode 100644 tests/Artifact.py create mode 100644 tests/ReplayData/Artifact.setUp.txt create mode 100644 tests/ReplayData/Artifact.testDelete.txt create mode 100644 tests/ReplayData/Artifact.testGetArtifactsFromRepo.txt create mode 100644 tests/ReplayData/Artifact.testGetArtifactsFromWorkflow.txt create mode 100644 tests/ReplayData/Artifact.testGetNonexistentArtifact.txt create mode 100644 tests/ReplayData/Artifact.testGetSingleArtifactFromRepo.txt diff --git a/github/Artifact.py b/github/Artifact.py new file mode 100644 index 0000000000..741bfea04d --- /dev/null +++ b/github/Artifact.py @@ -0,0 +1,178 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Aleksei Fedotov # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +import github.GithubObject +import github.WorkflowRun + + +class Artifact(github.GithubObject.NonCompletableGithubObject): + """ + This class represents an Artifact of Github Run + """ + + def __repr__(self): + return self.get__repr__({"name": self._name.value, "id": self._id.value}) + + @property + def archive_download_url(self): + """ + :type: string + """ + return self._archive_download_url.value + + @property + def created_at(self): + """ + :type: datetime.datetime + """ + return self._created_at.value + + @property + def expired(self): + """ + :type: bool + """ + return self._expired.value + + @property + def expires_at(self): + """ + :type: datetime.datetime + """ + return self._expires_at.value + + @property + def head_sha(self): + """ + :type: string + """ + return self._head_sha.value + + @property + def id(self): + """ + :type: string + """ + return self._id.value + + @property + def name(self): + """ + :type: string + """ + return self._name.value + + @property + def node_id(self): + """ + :type: string + """ + return self._node_id.value + + @property + def size_in_bytes(self): + """ + :type: integer + """ + return self._size_in_bytes.value + + @property + def updated_at(self): + """ + :type: datetime.datetime + """ + return self._updated_at.value + + @property + def url(self): + """ + :type: string + """ + return self._url.value + + @property + def workflow_run(self): + """ + :type: :class:`` + """ + return self._workflow_run.value + + def delete(self) -> bool: + """ + :calls: `DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id} `_ + :rtype: bool + """ + status, headers, data = self._requester.requestBlob("DELETE", self.url) + return status == 204 + + def _initAttributes(self): + self._archive_download_url = github.GithubObject.NotSet + self._created_at = github.GithubObject.NotSet + self._expired = github.GithubObject.NotSet + self._expires_at = github.GithubObject.NotSet + self._head_sha = github.GithubObject.NotSet + self._id = github.GithubObject.NotSet + self._name = github.GithubObject.NotSet + self._node_id = github.GithubObject.NotSet + self._size_in_bytes = github.GithubObject.NotSet + self._updated_at = github.GithubObject.NotSet + self._url = github.GithubObject.NotSet + self._workflow_run = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "archive_download_url" in attributes: # pragma no branch + self._archive_download_url = self._makeStringAttribute( + attributes["archive_download_url"] + ) + if "created_at" in attributes: # pragma no branch + assert attributes["created_at"] is None or isinstance( + attributes["created_at"], (str,) + ), attributes["created_at"] + self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) + if "expired" in attributes: # pragma no branch + self._expired = self._makeBoolAttribute(attributes["expired"]) + if "expires_at" in attributes: # pragma no branch + assert attributes["expires_at"] is None or isinstance( + attributes["expires_at"], (str,) + ), attributes["expires_at"] + self._expires_at = self._makeDatetimeAttribute(attributes["expires_at"]) + if "head_sha" in attributes: # pragma no branch + self._head_sha = self._makeStringAttribute(attributes["head_sha"]) + if "id" in attributes: # pragma no branch + self._id = self._makeIntAttribute(attributes["id"]) + if "name" in attributes: # pragma no branch + self._name = self._makeStringAttribute(attributes["name"]) + if "node_id" in attributes: # pragma no branch + self._node_id = self._makeStringAttribute(attributes["node_id"]) + if "size_in_bytes" in attributes: # pragma no branch + self._size_in_bytes = self._makeIntAttribute(attributes["size_in_bytes"]) + if "updated_at" in attributes: # pragma no branch + assert attributes["updated_at"] is None or isinstance( + attributes["updated_at"], (str,) + ), attributes["updated_at"] + self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) + if "url" in attributes: # pragma no branch + self._url = self._makeStringAttribute(attributes["url"]) + if "workflow_run" in attributes: # pragma no branch + self._workflow_run = self._makeClassAttribute( + github.WorkflowRun.WorkflowRun, attributes["workflow_run"] + ) diff --git a/github/Artifact.pyi b/github/Artifact.pyi new file mode 100644 index 0000000000..4fe7872ae7 --- /dev/null +++ b/github/Artifact.pyi @@ -0,0 +1,30 @@ +from github.WorkflowRun import WorkflowRun +from datetime import datetime +from github.GithubObject import NonCompletableGithubObject as NonCompletableGithubObject + +class Artifact(NonCompletableGithubObject): + @property + def archive_download_url(self) -> str: ... + @property + def created_at(self) -> datetime: ... + def delete(self) -> bool: ... + @property + def expired(self) -> bool: ... + @property + def expires_at(self) -> datetime: ... + @property + def head_sha(self) -> str: ... + @property + def id(self) -> int: ... + @property + def name(self) -> str: ... + @property + def node_id(self) -> str: ... + @property + def size_in_bytes(self) -> int: ... + @property + def updated_at(self) -> datetime: ... + @property + def url(self) -> str: ... + @property + def workflow_run(self) -> WorkflowRun: ... diff --git a/github/Repository.py b/github/Repository.py index aef02f2f1f..cc9b97062b 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -65,6 +65,7 @@ # Copyright 2018 Yves Zumbach # # Copyright 2018 Leying Chen # # Copyright 2020 Pascal Hofmann # +# Copyright 2022 Aleksei Fedotov # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -91,6 +92,7 @@ from deprecated import deprecated +import github.Artifact import github.Branch import github.CheckRun import github.CheckSuite @@ -3703,6 +3705,33 @@ def get_check_run(self, check_run_id): ) return github.CheckRun.CheckRun(self._requester, headers, data, completed=True) + def get_artifacts(self): + """ + :calls: `GET /repos/{owner}/{repo}/actions/artifacts `_ + :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.Artifact.Artifact` + """ + + return github.PaginatedList.PaginatedList( + github.Artifact.Artifact, + self._requester, + f"{self.url}/actions/artifacts", + None, + list_item="artifacts", + ) + + def get_artifact(self, artifact_id): + """ + :calls: `GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id} `_ + :param artifact_id: int + :rtype: :class:`github.Artifact.Artifact` + """ + assert isinstance(artifact_id, int), artifact_id + headers, data = self._requester.requestJsonAndCheck( + "GET", f"{self.url}/actions/artifacts/{artifact_id}" + ) + + return github.Artifact.Artifact(self._requester, headers, data, completed=True) + def _initAttributes(self): self._allow_merge_commit = github.GithubObject.NotSet self._allow_rebase_merge = github.GithubObject.NotSet diff --git a/github/Repository.pyi b/github/Repository.pyi index 103fc8f1c7..9c52cb2604 100644 --- a/github/Repository.pyi +++ b/github/Repository.pyi @@ -1,6 +1,7 @@ from datetime import date, datetime from typing import Any, Dict, List, Optional, Union, overload +from github.Artifact import Artifact from github.AuthenticatedUser import AuthenticatedUser from github.Branch import Branch from github.CheckRun import CheckRun @@ -305,6 +306,8 @@ class Repository(CompletableGithubObject): def get_archive_link( self, archive_format: str, ref: Union[str, _NotSetType] = ... ) -> str: ... + def get_artifact(self) -> Artifact: ... + def get_artifacts(self) -> PaginatedList[Artifact]: ... def get_assignees(self) -> PaginatedList[NamedUser]: ... def get_branch(self, branch: str) -> Branch: ... def rename_branch(self, branch: Union[str, Branch], new_name: str) -> bool: ... diff --git a/github/WorkflowRun.py b/github/WorkflowRun.py index 4c1cfad1b0..2846c9d4ce 100644 --- a/github/WorkflowRun.py +++ b/github/WorkflowRun.py @@ -1,6 +1,7 @@ ############################ Copyrights and license ############################ # # # Copyright 2020 Steve Kowalik # +# Copyright 2022 Aleksei Fedotov # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -22,6 +23,7 @@ from collections import namedtuple +import github.Artifact import github.GithubObject import github.PullRequest @@ -170,6 +172,15 @@ def artifacts_url(self): self._completeIfNotSet(self._artifacts_url) return self._artifacts_url.value + def get_artifacts(self): + return github.PaginatedList.PaginatedList( + github.Artifact.Artifact, + self._requester, + self._artifacts_url.value, + None, + list_item="artifacts", + ) + @property def cancel_url(self): """ diff --git a/tests/Artifact.py b/tests/Artifact.py new file mode 100644 index 0000000000..f5a4447a2d --- /dev/null +++ b/tests/Artifact.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 + +import github + +from . import Framework + + +class Artifact(Framework.TestCase): + def setUp(self): + super().setUp() + self.repo = self.g.get_repo("github/vscode-codeql") + + def testGetArtifactsFromWorkflow(self): + artifact = self.repo.get_workflow_run(160995070).get_artifacts()[0] + + self.assertEqual(artifact.name, "vscode-codeql-extension") + self.assertTrue(artifact.expired) + self.assertEqual( + repr(artifact), 'Artifact(name="vscode-codeql-extension", id=10495898)' + ) + + def testGetSingleArtifactFromRepo(self): + artifact = self.repo.get_artifact(378970214) + + self.assertEqual(artifact.name, "vscode-codeql-extension") + self.assertFalse(artifact.expired) + self.assertEqual( + repr(artifact), 'Artifact(name="vscode-codeql-extension", id=378970214)' + ) + + def testGetArtifactsFromRepo(self): + artifact_id = 378970214 + artifacts = self.repo.get_artifacts() + for item in artifacts: + if item.id == artifact_id: + artifact = item + break + else: + assert False, f"No artifact {artifact_id} is found" + + self.assertEqual( + repr(artifact), + f'Artifact(name="vscode-codeql-extension", id={artifact_id})', + ) + + def testGetNonexistentArtifact(self): + artifact_id = 396724437 + repo_name = "lexa/PyGithub" + repo = self.g.get_repo(repo_name) + with self.assertRaises(github.GithubException): + repo.get_artifact(artifact_id) + + def testDelete(self): + artifact_id = 396724439 + repo_name = "lexa/PyGithub" + repo = self.g.get_repo(repo_name) + artifact = repo.get_artifact(artifact_id) + self.assertTrue(artifact.delete()) + with self.assertRaises(github.GithubException): + repo.get_artifact(artifact_id) diff --git a/tests/ReplayData/Artifact.setUp.txt b/tests/ReplayData/Artifact.setUp.txt new file mode 100644 index 0000000000..d4c526072f --- /dev/null +++ b/tests/ReplayData/Artifact.setUp.txt @@ -0,0 +1,11 @@ +https +GET +api.github.com +None +/repos/github/vscode-codeql +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:34 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b8996d1d847bfa31020b23f12f995dc133b73619849c219cd1868e168b90f6fa"'), ('Last-Modified', 'Sat, 24 Sep 2022 16:33:41 GMT'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '45'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '15'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB34:5240:1F7B70F:1FF54F1:63343096')] +{"id":211169016,"node_id":"MDEwOlJlcG9zaXRvcnkyMTExNjkwMTY=","name":"vscode-codeql","full_name":"github/vscode-codeql","private":false,"owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/github/vscode-codeql","description":"An extension for Visual Studio Code that adds rich language support for CodeQL","fork":false,"url":"https://api.github.com/repos/github/vscode-codeql","forks_url":"https://api.github.com/repos/github/vscode-codeql/forks","keys_url":"https://api.github.com/repos/github/vscode-codeql/keys{/key_id}","collaborators_url":"https://api.github.com/repos/github/vscode-codeql/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/github/vscode-codeql/teams","hooks_url":"https://api.github.com/repos/github/vscode-codeql/hooks","issue_events_url":"https://api.github.com/repos/github/vscode-codeql/issues/events{/number}","events_url":"https://api.github.com/repos/github/vscode-codeql/events","assignees_url":"https://api.github.com/repos/github/vscode-codeql/assignees{/user}","branches_url":"https://api.github.com/repos/github/vscode-codeql/branches{/branch}","tags_url":"https://api.github.com/repos/github/vscode-codeql/tags","blobs_url":"https://api.github.com/repos/github/vscode-codeql/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/github/vscode-codeql/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/github/vscode-codeql/git/refs{/sha}","trees_url":"https://api.github.com/repos/github/vscode-codeql/git/trees{/sha}","statuses_url":"https://api.github.com/repos/github/vscode-codeql/statuses/{sha}","languages_url":"https://api.github.com/repos/github/vscode-codeql/languages","stargazers_url":"https://api.github.com/repos/github/vscode-codeql/stargazers","contributors_url":"https://api.github.com/repos/github/vscode-codeql/contributors","subscribers_url":"https://api.github.com/repos/github/vscode-codeql/subscribers","subscription_url":"https://api.github.com/repos/github/vscode-codeql/subscription","commits_url":"https://api.github.com/repos/github/vscode-codeql/commits{/sha}","git_commits_url":"https://api.github.com/repos/github/vscode-codeql/git/commits{/sha}","comments_url":"https://api.github.com/repos/github/vscode-codeql/comments{/number}","issue_comment_url":"https://api.github.com/repos/github/vscode-codeql/issues/comments{/number}","contents_url":"https://api.github.com/repos/github/vscode-codeql/contents/{+path}","compare_url":"https://api.github.com/repos/github/vscode-codeql/compare/{base}...{head}","merges_url":"https://api.github.com/repos/github/vscode-codeql/merges","archive_url":"https://api.github.com/repos/github/vscode-codeql/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/github/vscode-codeql/downloads","issues_url":"https://api.github.com/repos/github/vscode-codeql/issues{/number}","pulls_url":"https://api.github.com/repos/github/vscode-codeql/pulls{/number}","milestones_url":"https://api.github.com/repos/github/vscode-codeql/milestones{/number}","notifications_url":"https://api.github.com/repos/github/vscode-codeql/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/github/vscode-codeql/labels{/name}","releases_url":"https://api.github.com/repos/github/vscode-codeql/releases{/id}","deployments_url":"https://api.github.com/repos/github/vscode-codeql/deployments","created_at":"2019-09-26T19:44:53Z","updated_at":"2022-09-24T16:33:41Z","pushed_at":"2022-09-28T11:20:36Z","git_url":"git://github.com/github/vscode-codeql.git","ssh_url":"git@github.com:github/vscode-codeql.git","clone_url":"https://github.com/github/vscode-codeql.git","svn_url":"https://github.com/github/vscode-codeql","homepage":"","size":9461,"stargazers_count":311,"watchers_count":311,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":165,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":138,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["codeql","vscode","vscode-extension","works-with-codespaces"],"visibility":"public","forks":165,"open_issues":138,"watchers":311,"default_branch":"main","temp_clone_token":null,"organization":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","site_admin":false},"network_count":165,"subscribers_count":28} + diff --git a/tests/ReplayData/Artifact.testDelete.txt b/tests/ReplayData/Artifact.testDelete.txt new file mode 100644 index 0000000000..b678955715 --- /dev/null +++ b/tests/ReplayData/Artifact.testDelete.txt @@ -0,0 +1,44 @@ +https +GET +api.github.com +None +/repos/lexa/PyGithub +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:21:25 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"fa17a5276e7acf7935e265c35562e198168eba7e364cec522ed3c943db34b9ab"'), ('Last-Modified', 'Tue, 27 Sep 2022 16:35:24 GMT'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4986'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '14'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D144:88EA:13115A0:1360F01:6347F4B5')] +{"id":542181388,"node_id":"R_kgDOIFEIDA","name":"PyGithub","full_name":"lexa/PyGithub","private":false,"owner":{"login":"lexa","id":80391,"node_id":"MDQ6VXNlcjgwMzkx","avatar_url":"https://avatars.githubusercontent.com/u/80391?v=4","gravatar_id":"","url":"https://api.github.com/users/lexa","html_url":"https://github.com/lexa","followers_url":"https://api.github.com/users/lexa/followers","following_url":"https://api.github.com/users/lexa/following{/other_user}","gists_url":"https://api.github.com/users/lexa/gists{/gist_id}","starred_url":"https://api.github.com/users/lexa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lexa/subscriptions","organizations_url":"https://api.github.com/users/lexa/orgs","repos_url":"https://api.github.com/users/lexa/repos","events_url":"https://api.github.com/users/lexa/events{/privacy}","received_events_url":"https://api.github.com/users/lexa/received_events","type":"User","site_admin":false},"html_url":"https://github.com/lexa/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/lexa/PyGithub","forks_url":"https://api.github.com/repos/lexa/PyGithub/forks","keys_url":"https://api.github.com/repos/lexa/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lexa/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lexa/PyGithub/teams","hooks_url":"https://api.github.com/repos/lexa/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/lexa/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/lexa/PyGithub/events","assignees_url":"https://api.github.com/repos/lexa/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/lexa/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/lexa/PyGithub/tags","blobs_url":"https://api.github.com/repos/lexa/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lexa/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lexa/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/lexa/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lexa/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/lexa/PyGithub/languages","stargazers_url":"https://api.github.com/repos/lexa/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/lexa/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/lexa/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/lexa/PyGithub/subscription","commits_url":"https://api.github.com/repos/lexa/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/lexa/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/lexa/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/lexa/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/lexa/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/lexa/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lexa/PyGithub/merges","archive_url":"https://api.github.com/repos/lexa/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lexa/PyGithub/downloads","issues_url":"https://api.github.com/repos/lexa/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/lexa/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/lexa/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/lexa/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lexa/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/lexa/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/lexa/PyGithub/deployments","created_at":"2022-09-27T16:22:55Z","updated_at":"2022-09-27T16:35:24Z","pushed_at":"2022-10-13T10:44:09Z","git_url":"git://github.com/lexa/PyGithub.git","ssh_url":"git@github.com:lexa/PyGithub.git","clone_url":"https://github.com/lexa/PyGithub.git","svn_url":"https://github.com/lexa/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":11667,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":1,"watchers":0,"default_branch":"master","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":true,"allow_rebase_merge":true,"allow_auto_merge":false,"delete_branch_on_merge":false,"allow_update_branch":false,"use_squash_pr_title_as_default":false,"squash_merge_commit_message":"COMMIT_MESSAGES","squash_merge_commit_title":"COMMIT_OR_PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","parent":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2022-10-12T13:43:12Z","pushed_at":"2022-10-13T10:07:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13604,"stargazers_count":5535,"watchers_count":5535,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1533,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":161,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1533,"open_issues":161,"watchers":5535,"default_branch":"master"},"source":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2022-10-12T13:43:12Z","pushed_at":"2022-10-13T10:07:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13604,"stargazers_count":5535,"watchers_count":5535,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1533,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":161,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1533,"open_issues":161,"watchers":5535,"default_branch":"master"},"network_count":1533,"subscribers_count":0} + +https +GET +api.github.com +None +/repos/lexa/PyGithub/actions/artifacts/396724439 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:21:25 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"eb922edbfb3be37adfad91d445b790d560458056f413c992245fab18f82ff90f"'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4985'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '15'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D14E:9294:41910F2:427C643:6347F4B5')] +{"id":396724439,"node_id":"MDg6QXJ0aWZhY3QzOTY3MjQ0Mzk=","name":"test-artifact","size_in_bytes":0,"url":"https://api.github.com/repos/lexa/PyGithub/actions/artifacts/396724439","archive_download_url":"https://api.github.com/repos/lexa/PyGithub/actions/artifacts/396724439/zip","expired":false,"created_at":"2022-10-13T10:44:34Z","updated_at":"2022-10-13T10:44:36Z","expires_at":"2023-01-11T10:44:23Z","workflow_run":{"id":3241693286,"repository_id":542181388,"head_repository_id":542181388,"head_branch":"generate-artifact","head_sha":"64ac5680db075fc4cb6404fa49ccbd349a5c2d02"}} + +https +DELETE +api.github.com +None +/repos/lexa/PyGithub/actions/artifacts/396724439 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +204 +[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:21:26 GMT'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4984'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '16'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('X-GitHub-Request-Id', 'D15A:2275:3BBD835:3CA61EF:6347F4B5')] + + +https +GET +api.github.com +None +/repos/lexa/PyGithub/actions/artifacts/396724439 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +404 +[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:21:26 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4983'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '17'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D168:1AFB:3CAF4A2:3D97D08:6347F4B6')] +{"message":"Not Found","documentation_url":"https://docs.github.com/rest/reference/actions#get-an-artifact"} + diff --git a/tests/ReplayData/Artifact.testGetArtifactsFromRepo.txt b/tests/ReplayData/Artifact.testGetArtifactsFromRepo.txt new file mode 100644 index 0000000000..5b88f34ca5 --- /dev/null +++ b/tests/ReplayData/Artifact.testGetArtifactsFromRepo.txt @@ -0,0 +1,11 @@ +https +GET +api.github.com +None +/repos/github/vscode-codeql/actions/artifacts +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:32 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"fc70d5ff8044f680191934066321f0416508888f32bbc22bd5d35732150314db"'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '49'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '11'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB0C:45A2:1FA6467:2021BC5:63343094')] +{"total_count":4665,"artifacts":[{"id":379052698,"node_id":"MDg6QXJ0aWZhY3QzNzkwNTI2OTg=","name":"vscode-codeql-extension","size_in_bytes":16531611,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379052698","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379052698/zip","expired":false,"created_at":"2022-09-28T11:03:05Z","updated_at":"2022-09-28T11:03:07Z","expires_at":"2022-12-27T10:50:40Z","workflow_run":{"id":3142894849,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"e4de8c6b9b9eeb1b3db3be2f6938f0b54ebefb45"}},{"id":379039916,"node_id":"MDg6QXJ0aWZhY3QzNzkwMzk5MTY=","name":"vscode-codeql-extension","size_in_bytes":16531613,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379039916","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379039916/zip","expired":false,"created_at":"2022-09-28T10:50:45Z","updated_at":"2022-09-28T10:50:46Z","expires_at":"2022-12-27T10:36:55Z","workflow_run":{"id":3142811811,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"e4de8c6b9b9eeb1b3db3be2f6938f0b54ebefb45"}},{"id":379034077,"node_id":"MDg6QXJ0aWZhY3QzNzkwMzQwNzc=","name":"vscode-codeql-extension","size_in_bytes":16531613,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379034077","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/379034077/zip","expired":false,"created_at":"2022-09-28T10:44:50Z","updated_at":"2022-09-28T10:44:51Z","expires_at":"2022-12-27T10:32:15Z","workflow_run":{"id":3142785077,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"74d1747f0648d732d27ca691ac8fdb2bc31393a9"}},{"id":378970214,"node_id":"MDg6QXJ0aWZhY3QzNzg5NzAyMTQ=","name":"vscode-codeql-extension","size_in_bytes":16528288,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378970214","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378970214/zip","expired":false,"created_at":"2022-09-28T09:47:51Z","updated_at":"2022-09-28T09:47:52Z","expires_at":"2022-12-27T09:36:05Z","workflow_run":{"id":3142419796,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/refactor-raw-results-table","head_sha":"e3e2fcc3498ab7d945a9e58f7c1458171ab0a5a7"}},{"id":378965760,"node_id":"MDg6QXJ0aWZhY3QzNzg5NjU3NjA=","name":"vscode-codeql-extension","size_in_bytes":16531377,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378965760","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378965760/zip","expired":false,"created_at":"2022-09-28T09:44:05Z","updated_at":"2022-09-28T09:44:07Z","expires_at":"2022-12-27T09:36:35Z","workflow_run":{"id":3142423725,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"c96a388ca2247e91234ed80b5741ad051f7080be"}},{"id":378928202,"node_id":"MDg6QXJ0aWZhY3QzNzg5MjgyMDI=","name":"vscode-codeql-extension","size_in_bytes":16531345,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378928202","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378928202/zip","expired":false,"created_at":"2022-09-28T09:12:15Z","updated_at":"2022-09-28T09:12:17Z","expires_at":"2022-12-27T09:04:05Z","workflow_run":{"id":3142191438,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"elenatanasoiu/monitor-variant-analysis","head_sha":"1d6563a2d365e0b437c15c98d2d031b7a9895a1a"}},{"id":377794425,"node_id":"MDg6QXJ0aWZhY3QzNzc3OTQ0MjU=","name":"vscode-codeql-extension","size_in_bytes":16534523,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377794425","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377794425/zip","expired":false,"created_at":"2022-09-27T13:36:06Z","updated_at":"2022-09-27T13:36:07Z","expires_at":"2022-12-26T13:24:50Z","workflow_run":{"id":3135951730,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/scanned-repos-tab","head_sha":"f8cc3aec3201310fa0d0d7e4b68353ac21532d04"}},{"id":377794243,"node_id":"MDg6QXJ0aWZhY3QzNzc3OTQyNDM=","name":"vscode-codeql-extension","size_in_bytes":16528691,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377794243","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377794243/zip","expired":false,"created_at":"2022-09-27T13:35:54Z","updated_at":"2022-09-27T13:35:55Z","expires_at":"2022-12-26T13:23:38Z","workflow_run":{"id":3135944649,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"110d930b68ced05bf4d1cdc210a0aa4553eb1d8f"}},{"id":377768671,"node_id":"MDg6QXJ0aWZhY3QzNzc3Njg2NzE=","name":"vscode-codeql-extension","size_in_bytes":16534523,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377768671","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377768671/zip","expired":false,"created_at":"2022-09-27T13:16:02Z","updated_at":"2022-09-27T13:16:03Z","expires_at":"2022-12-26T13:04:14Z","workflow_run":{"id":3135820032,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/scanned-repos-tab","head_sha":"f8cc3aec3201310fa0d0d7e4b68353ac21532d04"}},{"id":377703600,"node_id":"MDg6QXJ0aWZhY3QzNzc3MDM2MDA=","name":"vscode-codeql-extension","size_in_bytes":16528687,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377703600","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377703600/zip","expired":false,"created_at":"2022-09-27T12:21:39Z","updated_at":"2022-09-27T12:21:41Z","expires_at":"2022-12-26T12:06:29Z","workflow_run":{"id":3135445831,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/outcome-panel","head_sha":"f408418f23713f44a42d88911d4ceb88ad9f8abb"}},{"id":377541670,"node_id":"MDg6QXJ0aWZhY3QzNzc1NDE2NzA=","name":"vscode-codeql-extension","size_in_bytes":16524162,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377541670","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377541670/zip","expired":false,"created_at":"2022-09-27T09:52:29Z","updated_at":"2022-09-27T09:52:30Z","expires_at":"2022-12-26T09:39:31Z","workflow_run":{"id":3134528732,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"0b638b6ae16284b25749e4a9039519f083e61110"}},{"id":377522495,"node_id":"MDg6QXJ0aWZhY3QzNzc1MjI0OTU=","name":"vscode-codeql-extension","size_in_bytes":16524160,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377522495","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/377522495/zip","expired":false,"created_at":"2022-09-27T09:34:10Z","updated_at":"2022-09-27T09:34:11Z","expires_at":"2022-12-26T09:21:11Z","workflow_run":{"id":3134413579,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"robertbrignull/submit-variant-analysis","head_sha":"ce7c7119c75e1b566393b2383f02b15eaa41c10f"}},{"id":376974726,"node_id":"MDg6QXJ0aWZhY3QzNzY5NzQ3MjY=","name":"vscode-codeql-extension","size_in_bytes":16528812,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376974726","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376974726/zip","expired":false,"created_at":"2022-09-26T22:18:01Z","updated_at":"2022-09-26T22:18:03Z","expires_at":"2022-12-25T22:08:56Z","workflow_run":{"id":3114754624,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"aeisenberg/new-qs","head_sha":"46ce536b8ebc9eea9ad147ac7036afa2c07bdb02"}},{"id":376774851,"node_id":"MDg6QXJ0aWZhY3QzNzY3NzQ4NTE=","name":"vscode-codeql-extension","size_in_bytes":16522621,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376774851","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376774851/zip","expired":false,"created_at":"2022-09-26T19:01:27Z","updated_at":"2022-09-26T19:01:28Z","expires_at":"2022-12-25T13:03:21Z","workflow_run":{"id":3127948741,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"0a5c272b1727c81be9d0d2f5cb6bd9137669b224"}},{"id":376495451,"node_id":"MDg6QXJ0aWZhY3QzNzY0OTU0NTE=","name":"vscode-codeql-extension","size_in_bytes":16524028,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376495451","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376495451/zip","expired":false,"created_at":"2022-09-26T15:07:10Z","updated_at":"2022-09-26T15:07:11Z","expires_at":"2022-12-25T14:52:55Z","workflow_run":{"id":3128619297,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"robertbrignull/submit-variant-analysis","head_sha":"5dce5e83b057305ad99304b553d97c2badf78865"}},{"id":376469189,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODk=","name":"result-index","size_in_bytes":2970,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469189","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469189/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:57Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469187,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODc=","name":"63537249","size_in_bytes":203508,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469187","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469187/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:00Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469186,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODY=","name":"3955647","size_in_bytes":136661,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469186","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469186/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:27Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469184,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODQ=","name":"24560307","size_in_bytes":4584337,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469184","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469184/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:14Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469182,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODI=","name":"24195339","size_in_bytes":6442460,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469182","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469182/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:15Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469180,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxODA=","name":"237159","size_in_bytes":77295,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469180","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469180/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:47:56Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469177,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNzc=","name":"2126244","size_in_bytes":68695,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469177","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469177/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:00Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469175,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNzU=","name":"167174","size_in_bytes":107629,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469175","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469175/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:06Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469173,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNzM=","name":"15062869","size_in_bytes":554768,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469173","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469173/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:47:59Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469171,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNzE=","name":"11730342","size_in_bytes":157074,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469171","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469171/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:03Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376469168,"node_id":"MDg6QXJ0aWZhY3QzNzY0NjkxNjg=","name":"10270250","size_in_bytes":1048754,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469168","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376469168/zip","expired":false,"created_at":"2022-09-26T14:49:01Z","updated_at":"2022-09-26T14:49:03Z","expires_at":"2022-12-25T14:48:21Z","workflow_run":{"id":3128707576,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376456189,"node_id":"MDg6QXJ0aWZhY3QzNzY0NTYxODk=","name":"result-index","size_in_bytes":2970,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456189","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456189/zip","expired":false,"created_at":"2022-09-26T14:40:30Z","updated_at":"2022-09-26T14:40:32Z","expires_at":"2022-12-25T14:40:26Z","workflow_run":{"id":3128646251,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376456188,"node_id":"MDg6QXJ0aWZhY3QzNzY0NTYxODg=","name":"63537249","size_in_bytes":203508,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456188","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456188/zip","expired":false,"created_at":"2022-09-26T14:40:30Z","updated_at":"2022-09-26T14:40:32Z","expires_at":"2022-12-25T14:39:40Z","workflow_run":{"id":3128646251,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376456186,"node_id":"MDg6QXJ0aWZhY3QzNzY0NTYxODY=","name":"3955647","size_in_bytes":136661,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456186","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456186/zip","expired":false,"created_at":"2022-09-26T14:40:30Z","updated_at":"2022-09-26T14:40:32Z","expires_at":"2022-12-25T14:39:41Z","workflow_run":{"id":3128646251,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}},{"id":376456184,"node_id":"MDg6QXJ0aWZhY3QzNzY0NTYxODQ=","name":"24560307","size_in_bytes":4584337,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456184","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/376456184/zip","expired":false,"created_at":"2022-09-26T14:40:30Z","updated_at":"2022-09-26T14:40:32Z","expires_at":"2022-12-25T14:39:46Z","workflow_run":{"id":3128646251,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"main","head_sha":"ac3b94dac81e93d5d807c6d33d484ef0347ef38a"}}]} + diff --git a/tests/ReplayData/Artifact.testGetArtifactsFromWorkflow.txt b/tests/ReplayData/Artifact.testGetArtifactsFromWorkflow.txt new file mode 100644 index 0000000000..d1999243b9 --- /dev/null +++ b/tests/ReplayData/Artifact.testGetArtifactsFromWorkflow.txt @@ -0,0 +1,22 @@ +https +GET +api.github.com +None +/repos/github/vscode-codeql/actions/runs/160995070 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:33 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"4e62f3e45aa64c41f5d8dda4bf9c8e155c592b4f9d70cedf888671f278775a36"'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '47'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '13'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB22:78D3:20371B2:20B2648:63343095')] +{"id":160995070,"name":"Release","node_id":"MDExOldvcmtmbG93UnVuMTYwOTk1MDcw","head_branch":"v1.3.1","head_sha":"c4353981fa5a3565d075d187276eebd92b2a20fc","path":".github/workflows/release.yml","display_title":"Release","run_number":47,"event":"push","status":"completed","conclusion":"success","workflow_id":247289,"check_suite_id":887193234,"check_suite_node_id":"MDEwOkNoZWNrU3VpdGU4ODcxOTMyMzQ=","url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070","html_url":"https://github.com/github/vscode-codeql/actions/runs/160995070","pull_requests":[],"created_at":"2020-07-07T18:34:48Z","updated_at":"2020-07-07T18:36:58Z","actor":{"login":"jcreedcmu","id":1500822,"node_id":"MDQ6VXNlcjE1MDA4MjI=","avatar_url":"https://avatars.githubusercontent.com/u/1500822?v=4","gravatar_id":"","url":"https://api.github.com/users/jcreedcmu","html_url":"https://github.com/jcreedcmu","followers_url":"https://api.github.com/users/jcreedcmu/followers","following_url":"https://api.github.com/users/jcreedcmu/following{/other_user}","gists_url":"https://api.github.com/users/jcreedcmu/gists{/gist_id}","starred_url":"https://api.github.com/users/jcreedcmu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jcreedcmu/subscriptions","organizations_url":"https://api.github.com/users/jcreedcmu/orgs","repos_url":"https://api.github.com/users/jcreedcmu/repos","events_url":"https://api.github.com/users/jcreedcmu/events{/privacy}","received_events_url":"https://api.github.com/users/jcreedcmu/received_events","type":"User","site_admin":false},"run_attempt":1,"referenced_workflows":[],"run_started_at":"2020-07-07T18:34:48Z","jobs_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/jobs","logs_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/logs","check_suite_url":"https://api.github.com/repos/github/vscode-codeql/check-suites/887193234","artifacts_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/artifacts","cancel_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/cancel","rerun_url":"https://api.github.com/repos/github/vscode-codeql/actions/runs/160995070/rerun","previous_attempt_url":null,"workflow_url":"https://api.github.com/repos/github/vscode-codeql/actions/workflows/247289","head_commit":{"id":"c4353981fa5a3565d075d187276eebd92b2a20fc","tree_id":"b5561db1b83aa7f5bd0e5126b375caaf79cc16fb","message":"update CHANGELOG for release","timestamp":"2020-07-07T18:28:53Z","author":{"name":"Jason Reed","email":"jcreedcmu@github.com"},"committer":{"name":"Jason Reed","email":"jcreedcmu@github.com"}},"repository":{"id":211169016,"node_id":"MDEwOlJlcG9zaXRvcnkyMTExNjkwMTY=","name":"vscode-codeql","full_name":"github/vscode-codeql","private":false,"owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/github/vscode-codeql","description":"An extension for Visual Studio Code that adds rich language support for CodeQL","fork":false,"url":"https://api.github.com/repos/github/vscode-codeql","forks_url":"https://api.github.com/repos/github/vscode-codeql/forks","keys_url":"https://api.github.com/repos/github/vscode-codeql/keys{/key_id}","collaborators_url":"https://api.github.com/repos/github/vscode-codeql/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/github/vscode-codeql/teams","hooks_url":"https://api.github.com/repos/github/vscode-codeql/hooks","issue_events_url":"https://api.github.com/repos/github/vscode-codeql/issues/events{/number}","events_url":"https://api.github.com/repos/github/vscode-codeql/events","assignees_url":"https://api.github.com/repos/github/vscode-codeql/assignees{/user}","branches_url":"https://api.github.com/repos/github/vscode-codeql/branches{/branch}","tags_url":"https://api.github.com/repos/github/vscode-codeql/tags","blobs_url":"https://api.github.com/repos/github/vscode-codeql/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/github/vscode-codeql/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/github/vscode-codeql/git/refs{/sha}","trees_url":"https://api.github.com/repos/github/vscode-codeql/git/trees{/sha}","statuses_url":"https://api.github.com/repos/github/vscode-codeql/statuses/{sha}","languages_url":"https://api.github.com/repos/github/vscode-codeql/languages","stargazers_url":"https://api.github.com/repos/github/vscode-codeql/stargazers","contributors_url":"https://api.github.com/repos/github/vscode-codeql/contributors","subscribers_url":"https://api.github.com/repos/github/vscode-codeql/subscribers","subscription_url":"https://api.github.com/repos/github/vscode-codeql/subscription","commits_url":"https://api.github.com/repos/github/vscode-codeql/commits{/sha}","git_commits_url":"https://api.github.com/repos/github/vscode-codeql/git/commits{/sha}","comments_url":"https://api.github.com/repos/github/vscode-codeql/comments{/number}","issue_comment_url":"https://api.github.com/repos/github/vscode-codeql/issues/comments{/number}","contents_url":"https://api.github.com/repos/github/vscode-codeql/contents/{+path}","compare_url":"https://api.github.com/repos/github/vscode-codeql/compare/{base}...{head}","merges_url":"https://api.github.com/repos/github/vscode-codeql/merges","archive_url":"https://api.github.com/repos/github/vscode-codeql/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/github/vscode-codeql/downloads","issues_url":"https://api.github.com/repos/github/vscode-codeql/issues{/number}","pulls_url":"https://api.github.com/repos/github/vscode-codeql/pulls{/number}","milestones_url":"https://api.github.com/repos/github/vscode-codeql/milestones{/number}","notifications_url":"https://api.github.com/repos/github/vscode-codeql/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/github/vscode-codeql/labels{/name}","releases_url":"https://api.github.com/repos/github/vscode-codeql/releases{/id}","deployments_url":"https://api.github.com/repos/github/vscode-codeql/deployments"},"head_repository":{"id":211169016,"node_id":"MDEwOlJlcG9zaXRvcnkyMTExNjkwMTY=","name":"vscode-codeql","full_name":"github/vscode-codeql","private":false,"owner":{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","gravatar_id":"","url":"https://api.github.com/users/github","html_url":"https://github.com/github","followers_url":"https://api.github.com/users/github/followers","following_url":"https://api.github.com/users/github/following{/other_user}","gists_url":"https://api.github.com/users/github/gists{/gist_id}","starred_url":"https://api.github.com/users/github/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github/subscriptions","organizations_url":"https://api.github.com/users/github/orgs","repos_url":"https://api.github.com/users/github/repos","events_url":"https://api.github.com/users/github/events{/privacy}","received_events_url":"https://api.github.com/users/github/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/github/vscode-codeql","description":"An extension for Visual Studio Code that adds rich language support for CodeQL","fork":false,"url":"https://api.github.com/repos/github/vscode-codeql","forks_url":"https://api.github.com/repos/github/vscode-codeql/forks","keys_url":"https://api.github.com/repos/github/vscode-codeql/keys{/key_id}","collaborators_url":"https://api.github.com/repos/github/vscode-codeql/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/github/vscode-codeql/teams","hooks_url":"https://api.github.com/repos/github/vscode-codeql/hooks","issue_events_url":"https://api.github.com/repos/github/vscode-codeql/issues/events{/number}","events_url":"https://api.github.com/repos/github/vscode-codeql/events","assignees_url":"https://api.github.com/repos/github/vscode-codeql/assignees{/user}","branches_url":"https://api.github.com/repos/github/vscode-codeql/branches{/branch}","tags_url":"https://api.github.com/repos/github/vscode-codeql/tags","blobs_url":"https://api.github.com/repos/github/vscode-codeql/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/github/vscode-codeql/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/github/vscode-codeql/git/refs{/sha}","trees_url":"https://api.github.com/repos/github/vscode-codeql/git/trees{/sha}","statuses_url":"https://api.github.com/repos/github/vscode-codeql/statuses/{sha}","languages_url":"https://api.github.com/repos/github/vscode-codeql/languages","stargazers_url":"https://api.github.com/repos/github/vscode-codeql/stargazers","contributors_url":"https://api.github.com/repos/github/vscode-codeql/contributors","subscribers_url":"https://api.github.com/repos/github/vscode-codeql/subscribers","subscription_url":"https://api.github.com/repos/github/vscode-codeql/subscription","commits_url":"https://api.github.com/repos/github/vscode-codeql/commits{/sha}","git_commits_url":"https://api.github.com/repos/github/vscode-codeql/git/commits{/sha}","comments_url":"https://api.github.com/repos/github/vscode-codeql/comments{/number}","issue_comment_url":"https://api.github.com/repos/github/vscode-codeql/issues/comments{/number}","contents_url":"https://api.github.com/repos/github/vscode-codeql/contents/{+path}","compare_url":"https://api.github.com/repos/github/vscode-codeql/compare/{base}...{head}","merges_url":"https://api.github.com/repos/github/vscode-codeql/merges","archive_url":"https://api.github.com/repos/github/vscode-codeql/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/github/vscode-codeql/downloads","issues_url":"https://api.github.com/repos/github/vscode-codeql/issues{/number}","pulls_url":"https://api.github.com/repos/github/vscode-codeql/pulls{/number}","milestones_url":"https://api.github.com/repos/github/vscode-codeql/milestones{/number}","notifications_url":"https://api.github.com/repos/github/vscode-codeql/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/github/vscode-codeql/labels{/name}","releases_url":"https://api.github.com/repos/github/vscode-codeql/releases{/id}","deployments_url":"https://api.github.com/repos/github/vscode-codeql/deployments"}} + +https +GET +api.github.com +None +/repos/github/vscode-codeql/actions/runs/160995070/artifacts +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:33 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"384dd95df518dd09f3403cdb0efea6f07b615808530fa59263a9f3f6a39e0436"'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '46'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '14'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB2A:11933:1E407FD:1EBB285:63343095')] +{"total_count":1,"artifacts":[{"id":10495898,"node_id":"MDg6QXJ0aWZhY3QxMDQ5NTg5OA==","name":"vscode-codeql-extension","size_in_bytes":5555905,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/10495898","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/10495898/zip","expired":true,"created_at":"2020-07-07T18:36:58Z","updated_at":"2020-07-07T18:36:58Z","expires_at":"2020-10-05T18:36:58Z","workflow_run":{"id":160995070,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"v1.3.1","head_sha":"c4353981fa5a3565d075d187276eebd92b2a20fc"}}]} + diff --git a/tests/ReplayData/Artifact.testGetNonexistentArtifact.txt b/tests/ReplayData/Artifact.testGetNonexistentArtifact.txt new file mode 100644 index 0000000000..ad6e2bd6ec --- /dev/null +++ b/tests/ReplayData/Artifact.testGetNonexistentArtifact.txt @@ -0,0 +1,22 @@ +https +GET +api.github.com +None +/repos/lexa/PyGithub +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:04:26 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"fa17a5276e7acf7935e265c35562e198168eba7e364cec522ed3c943db34b9ab"'), ('Last-Modified', 'Tue, 27 Sep 2022 16:35:24 GMT'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'BDAE:668A:3A452DF:3B2C773:6347F0BA')] +{"id":542181388,"node_id":"R_kgDOIFEIDA","name":"PyGithub","full_name":"lexa/PyGithub","private":false,"owner":{"login":"lexa","id":80391,"node_id":"MDQ6VXNlcjgwMzkx","avatar_url":"https://avatars.githubusercontent.com/u/80391?v=4","gravatar_id":"","url":"https://api.github.com/users/lexa","html_url":"https://github.com/lexa","followers_url":"https://api.github.com/users/lexa/followers","following_url":"https://api.github.com/users/lexa/following{/other_user}","gists_url":"https://api.github.com/users/lexa/gists{/gist_id}","starred_url":"https://api.github.com/users/lexa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lexa/subscriptions","organizations_url":"https://api.github.com/users/lexa/orgs","repos_url":"https://api.github.com/users/lexa/repos","events_url":"https://api.github.com/users/lexa/events{/privacy}","received_events_url":"https://api.github.com/users/lexa/received_events","type":"User","site_admin":false},"html_url":"https://github.com/lexa/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/lexa/PyGithub","forks_url":"https://api.github.com/repos/lexa/PyGithub/forks","keys_url":"https://api.github.com/repos/lexa/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lexa/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lexa/PyGithub/teams","hooks_url":"https://api.github.com/repos/lexa/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/lexa/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/lexa/PyGithub/events","assignees_url":"https://api.github.com/repos/lexa/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/lexa/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/lexa/PyGithub/tags","blobs_url":"https://api.github.com/repos/lexa/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lexa/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lexa/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/lexa/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lexa/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/lexa/PyGithub/languages","stargazers_url":"https://api.github.com/repos/lexa/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/lexa/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/lexa/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/lexa/PyGithub/subscription","commits_url":"https://api.github.com/repos/lexa/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/lexa/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/lexa/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/lexa/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/lexa/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/lexa/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lexa/PyGithub/merges","archive_url":"https://api.github.com/repos/lexa/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lexa/PyGithub/downloads","issues_url":"https://api.github.com/repos/lexa/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/lexa/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/lexa/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/lexa/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lexa/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/lexa/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/lexa/PyGithub/deployments","created_at":"2022-09-27T16:22:55Z","updated_at":"2022-09-27T16:35:24Z","pushed_at":"2022-10-13T10:44:09Z","git_url":"git://github.com/lexa/PyGithub.git","ssh_url":"git@github.com:lexa/PyGithub.git","clone_url":"https://github.com/lexa/PyGithub.git","svn_url":"https://github.com/lexa/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":11667,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":1,"watchers":0,"default_branch":"master","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":true,"allow_rebase_merge":true,"allow_auto_merge":false,"delete_branch_on_merge":false,"allow_update_branch":false,"use_squash_pr_title_as_default":false,"squash_merge_commit_message":"COMMIT_MESSAGES","squash_merge_commit_title":"COMMIT_OR_PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","parent":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2022-10-12T13:43:12Z","pushed_at":"2022-10-13T10:07:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13604,"stargazers_count":5535,"watchers_count":5535,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1533,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":161,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1533,"open_issues":161,"watchers":5535,"default_branch":"master"},"source":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2022-10-12T13:43:12Z","pushed_at":"2022-10-13T10:07:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13604,"stargazers_count":5535,"watchers_count":5535,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1533,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":161,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1533,"open_issues":161,"watchers":5535,"default_branch":"master"},"network_count":1533,"subscribers_count":0} + +https +GET +api.github.com +None +/repos/lexa/PyGithub/actions/artifacts/396724437 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +404 +[('Server', 'GitHub.com'), ('Date', 'Thu, 13 Oct 2022 11:04:27 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2022-12-12 11:42:35 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4997'), ('X-RateLimit-Reset', '1665662666'), ('X-RateLimit-Used', '3'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'BDBA:9294:4077852:415F362:6347F0BB')] +{"message":"Not Found","documentation_url":"https://docs.github.com/rest/reference/actions#get-an-artifact"} + diff --git a/tests/ReplayData/Artifact.testGetSingleArtifactFromRepo.txt b/tests/ReplayData/Artifact.testGetSingleArtifactFromRepo.txt new file mode 100644 index 0000000000..89eaf932ee --- /dev/null +++ b/tests/ReplayData/Artifact.testGetSingleArtifactFromRepo.txt @@ -0,0 +1,11 @@ +https +GET +api.github.com +None +/repos/github/vscode-codeql/actions/artifacts/378970214 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Wed, 28 Sep 2022 11:31:34 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"1ce0fc2843af81fc42d4196f2c6f764261d3f2fb3ad2e8252e12328e3d172e83"'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '44'), ('X-RateLimit-Reset', '1664368108'), ('X-RateLimit-Used', '16'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'AB42:A24F:196DD8:19DBE1:63343096')] +{"id":378970214,"node_id":"MDg6QXJ0aWZhY3QzNzg5NzAyMTQ=","name":"vscode-codeql-extension","size_in_bytes":16528288,"url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378970214","archive_download_url":"https://api.github.com/repos/github/vscode-codeql/actions/artifacts/378970214/zip","expired":false,"created_at":"2022-09-28T09:47:51Z","updated_at":"2022-09-28T09:47:52Z","expires_at":"2022-12-27T09:36:05Z","workflow_run":{"id":3142419796,"repository_id":211169016,"head_repository_id":211169016,"head_branch":"koesie10/refactor-raw-results-table","head_sha":"e3e2fcc3498ab7d945a9e58f7c1458171ab0a5a7"}} + From a71cd37a86214d7e22441bf1235829ed063f8ed8 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 25 Oct 2022 06:08:36 +0300 Subject: [PATCH 08/32] Require pyjwt>=2.4.0 to avoid CVE-2022-29217 (#2333) --- requirements.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index ae9478587a..bc82296fc8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ pynacl>=1.4.0 requests>=2.14.0 -pyjwt>=2.0 +pyjwt>=2.4.0 sphinx<3 Jinja2<3.1 sphinx-rtd-theme<1.1 diff --git a/setup.py b/setup.py index acd8c328c0..bd22abb837 100755 --- a/setup.py +++ b/setup.py @@ -106,7 +106,7 @@ python_requires=">=3.7", install_requires=[ "deprecated", - "pyjwt>=2.0", + "pyjwt>=2.4.0", "pynacl>=1.4.0", "requests>=2.14.0", ], From db9337a4eee13f13f6953b69f2c501c69345d030 Mon Sep 17 00:00:00 2001 From: Sarah Mount <97674+snim2@users.noreply.github.com> Date: Tue, 25 Oct 2022 04:20:10 +0100 Subject: [PATCH 09/32] Fix/types for repo topic team (#2341) Co-authored-by: Liuyang Wan --- github/Repository.pyi | 24 +++++++++++++++++++----- github/Team.pyi | 8 ++++++++ github/Topic.pyi | 22 +++++++++++++++++++--- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/github/Repository.pyi b/github/Repository.pyi index 9c52cb2604..16a0a0a65a 100644 --- a/github/Repository.pyi +++ b/github/Repository.pyi @@ -106,8 +106,8 @@ class Repository(CompletableGithubObject): def contributors_url(self) -> str: ... def create_check_run( self, - name: str = ..., - head_sha: str = ..., + name: str, + head_sha: str, details_url: Union[_NotSetType, str] = ..., external_id: Union[_NotSetType, str] = ..., status: Union[_NotSetType, str] = ..., @@ -214,7 +214,9 @@ class Repository(CompletableGithubObject): description: Union[str, _NotSetType] = ..., due_on: Union[date, _NotSetType] = ..., ) -> Milestone: ... - def create_project(self, name: str, body: str = ...) -> Project: ... + def create_project( + self, name: str, body: Union[str, _NotSetType] = ... + ) -> Project: ... @overload def create_pull( self, @@ -237,7 +239,7 @@ class Repository(CompletableGithubObject): issue: Issue, ) -> PullRequest: ... def create_repository_dispatch( - self, event_type: str, client_payload: Dict[str, Any] + self, event_type: str, client_payload: Union[Dict[str, Any], _NotSetType] = ... ) -> bool: ... def create_secret(self, secret_name: str, unencrypted_value: str) -> bool: ... def delete_secret(self, secret_name: str) -> bool: ... @@ -466,7 +468,13 @@ class Repository(CompletableGithubObject): def get_workflow(self, id_or_name: Union[str, int]) -> Workflow: ... def get_workflows(self) -> PaginatedList[Workflow]: ... def get_workflow_run(self, id_: int) -> WorkflowRun: ... - def get_workflow_runs(self) -> PaginatedList[WorkflowRun]: ... + def get_workflow_runs( + self, + actor: Union[NamedUser, _NotSetType] = ..., + branch: Union[Branch, _NotSetType] = ..., + event: Union[str, _NotSetType] = ..., + status: Union[str, _NotSetType] = ..., + ) -> PaginatedList[WorkflowRun]: ... def update_check_suites_preferences( self, auto_trigger_checks: List[Dict[str, Union[bool, int]]] ) -> RepositoryPreferences: ... @@ -499,6 +507,8 @@ class Repository(CompletableGithubObject): @property def id(self) -> int: ... @property + def is_template(self) -> bool: ... + @property def issue_comment_url(self) -> str: ... @property def issue_events_url(self) -> str: ... @@ -587,6 +597,8 @@ class Repository(CompletableGithubObject): @property def teams_url(self) -> str: ... @property + def topics(self) -> List[str]: ... + @property def trees_url(self) -> str: ... def unsubscribe_from_hub(self, event: str, callback: str) -> None: ... def update_file( @@ -604,6 +616,8 @@ class Repository(CompletableGithubObject): @property def url(self) -> str: ... @property + def visibility(self) -> str: ... + @property def watchers(self) -> int: ... @property def watchers_count(self) -> int: ... diff --git a/github/Team.pyi b/github/Team.pyi index 2dafb9728b..5e9beaa749 100644 --- a/github/Team.pyi +++ b/github/Team.pyi @@ -5,6 +5,7 @@ from github.NamedUser import NamedUser from github.Organization import Organization from github.Membership import Membership from github.PaginatedList import PaginatedList +from github.Permissions import Permissions from github.Repository import Repository from github.TeamDiscussion import TeamDiscussion @@ -20,6 +21,10 @@ class Team(CompletableGithubObject): def add_to_members(self, member: NamedUser) -> None: ... def get_team_membership(self, member: Union[str, NamedUser]) -> Membership: ... def add_to_repos(self, repo: Repository) -> None: ... + def get_repo_permission( + self, repo: Repository + ) -> Union[Permissions, _NotSetType]: ... + def update_team_repository(self, repo: Repository, permission: str) -> bool: ... def delete(self) -> None: ... @property def description(self) -> str: ... @@ -30,6 +35,7 @@ class Team(CompletableGithubObject): permission: Union[str, _NotSetType] = ..., privacy: Union[str, _NotSetType] = ..., ) -> None: ... + def get_teams(self) -> PaginatedList[Team]: ... def get_discussions(self) -> PaginatedList[TeamDiscussion]: ... def get_members( self, role: Union[str, _NotSetType] = ... @@ -65,4 +71,6 @@ class Team(CompletableGithubObject): @property def url(self) -> str: ... @property + def parent(self) -> Union[Team, _NotSetType]: ... + @property def html_url(self) -> str: ... diff --git a/github/Topic.pyi b/github/Topic.pyi index ad62a839e1..f8a35a564f 100644 --- a/github/Topic.pyi +++ b/github/Topic.pyi @@ -1,3 +1,5 @@ +import datetime + from typing import Any, Dict from github.GithubObject import NonCompletableGithubObject @@ -7,10 +9,24 @@ class Topic(NonCompletableGithubObject): def _initAttributes(self) -> None: ... def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... @property - def description(self) -> str: ... + def name(self) -> str: ... @property def display_name(self) -> str: ... @property - def name(self) -> str: ... - @property def short_description(self) -> str: ... + @property + def description(self) -> str: ... + @property + def created_by(self) -> str: ... + @property + def released(self) -> str: ... + @property + def created_at(self) -> datetime.datetime: ... + @property + def updated_at(self) -> datetime.datetime: ... + @property + def featured(self) -> bool: ... + @property + def curated(self) -> bool: ... + @property + def score(self) -> float: ... From 784a3efd68cbfd7676bc545b0c52b511eee9b3dd Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Tue, 25 Oct 2022 05:34:46 +0200 Subject: [PATCH 10/32] Add retry and pool_size to typing (#2151) --- github/MainClass.pyi | 5 +++-- github/Requester.pyi | 11 +++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/github/MainClass.pyi b/github/MainClass.pyi index a757e9e28b..62b84e238a 100644 --- a/github/MainClass.pyi +++ b/github/MainClass.pyi @@ -22,7 +22,7 @@ from github.RateLimit import RateLimit from github.Repository import Repository from github.Topic import Topic -# from urllib3.util.retry import Retry +from urllib3.util import Retry TGithubObject = TypeVar("TGithubObject", bound=GithubObject) @@ -39,7 +39,8 @@ class Github: user_agent: str = ..., per_page: int = ..., verify: bool = ..., - retry: Any = ..., + retry: Optional[Union[int, Retry]] = ..., + pool_size: Optional[int] = ..., ) -> None: ... @property def FIX_REPO_GET_GIT_REF(self) -> bool: ... diff --git a/github/Requester.pyi b/github/Requester.pyi index f97220c136..381fae929b 100644 --- a/github/Requester.pyi +++ b/github/Requester.pyi @@ -6,7 +6,7 @@ from requests.models import Response from github.GithubObject import GithubObject -# from urllib3.util.retry import Retry +from urllib3.util import Retry class HTTPRequestsConnectionClass: def __init__( @@ -15,7 +15,8 @@ class HTTPRequestsConnectionClass: port: Optional[int] = ..., strict: bool = ..., timeout: Optional[int] = ..., - retry: Any = ..., + retry: Optional[Union[int, Retry]] = ..., + pool_size: Optional[int] = ..., **kwargs: str ) -> None: ... def close(self) -> None: ... @@ -31,7 +32,8 @@ class HTTPSRequestsConnectionClass: port: Optional[int] = ..., strict: bool = ..., timeout: Optional[int] = ..., - retry: Any = ..., + retry: Optional[Union[int, Retry]] = ..., + pool_size: Optional[int] = ..., **kwargs: str ) -> None: ... def close(self) -> None: ... @@ -120,7 +122,8 @@ class Requester: user_agent: str, per_page: int, verify: bool, - retry: Any, + retry: Optional[Union[int, Retry]], + pool_size: Optional[int], ) -> None: ... def _initializeDebugFeature(self) -> None: ... def check_me(self, obj: GithubObject) -> None: ... From 0fadd6be8ed138f971a71a41923c61c9b5c4bdda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20K=C3=B6pcke?= Date: Sat, 29 Oct 2022 03:03:57 +0200 Subject: [PATCH 11/32] Add support for repository autolink references (#2016) --- github/Autolink.py | 62 +++++++++++++++++++ github/Autolink.pyi | 13 ++++ github/Repository.py | 40 ++++++++++++ github/Repository.pyi | 4 ++ tests/Autolink.py | 45 ++++++++++++++ tests/ReplayData/Autolink.setUp.txt | 33 ++++++++++ .../Repository.testCreateAutolink.txt | 11 ++++ .../Repository.testGetAutolinks.txt | 11 ++++ .../Repository.testRemoveAutolink.txt | 11 ++++ tests/Repository.py | 19 ++++++ 10 files changed, 249 insertions(+) create mode 100644 github/Autolink.py create mode 100644 github/Autolink.pyi create mode 100644 tests/Autolink.py create mode 100644 tests/ReplayData/Autolink.setUp.txt create mode 100644 tests/ReplayData/Repository.testCreateAutolink.txt create mode 100644 tests/ReplayData/Repository.testGetAutolinks.txt create mode 100644 tests/ReplayData/Repository.testRemoveAutolink.txt diff --git a/github/Autolink.py b/github/Autolink.py new file mode 100644 index 0000000000..3188128c2d --- /dev/null +++ b/github/Autolink.py @@ -0,0 +1,62 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2021 Marco Köpcke # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +import github.GithubObject + + +class Autolink(github.GithubObject.NonCompletableGithubObject): + def __repr__(self): + return self.get__repr__({"id": self._id.value}) + + @property + def id(self): + """ + :type: integer + """ + return self._id.value + + @property + def key_prefix(self): + """ + :type: string + """ + return self._key_prefix.value + + @property + def url_template(self): + """ + :type: string + """ + return self._url_template.value + + def _initAttributes(self): + self._id = github.GithubObject.NotSet + self._key_prefix = github.GithubObject.NotSet + self._url_template = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "id" in attributes: # pragma no branch + self._id = self._makeIntAttribute(attributes["id"]) + if "key_prefix" in attributes: # pragma no branch + self._key_prefix = self._makeStringAttribute(attributes["key_prefix"]) + if "url_template" in attributes: # pragma no branch + self._url_template = self._makeStringAttribute(attributes["url_template"]) diff --git a/github/Autolink.pyi b/github/Autolink.pyi new file mode 100644 index 0000000000..3541da984d --- /dev/null +++ b/github/Autolink.pyi @@ -0,0 +1,13 @@ +from typing import Any, Dict, List + +from github.GithubObject import NonCompletableGithubObject + +class Autolink(NonCompletableGithubObject): + def _initAttributes(self) -> None: ... + def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... + @property + def id(self) -> int: ... + @property + def key_prefix(self) -> str: ... + @property + def url_template(self) -> str: ... diff --git a/github/Repository.py b/github/Repository.py index cc9b97062b..1090c8ade7 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -93,6 +93,7 @@ from deprecated import deprecated import github.Artifact +import github.Autolink import github.Branch import github.CheckRun import github.CheckSuite @@ -918,6 +919,22 @@ def compare(self, base, head): self._requester, headers, data, completed=True ) + def create_autolink(self, key_prefix, url_template): + """ + :calls: `POST /repos/{owner}/{repo}/autolinks `_ + :param key_prefix: string + :param url_template: string + :rtype: :class:`github.Autolink.Autolink` + """ + assert isinstance(key_prefix, str), key_prefix + assert isinstance(url_template, str), url_template + + post_parameters = {"key_prefix": key_prefix, "url_template": url_template} + headers, data = self._requester.requestJsonAndCheck( + "POST", f"{self.url}/autolinks", input=post_parameters + ) + return github.Autolink.Autolink(self._requester, headers, data, completed=True) + def create_git_blob(self, content, encoding): """ :calls: `POST /repos/{owner}/{repo}/git/blobs `_ @@ -2088,6 +2105,15 @@ def get_projects(self, state=github.GithubObject.NotSet): {"Accept": Consts.mediaTypeProjectsPreview}, ) + def get_autolinks(self): + """ + :calls: `GET /repos/{owner}/{repo}/autolinks `_ + :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.Autolink.Autolink` + """ + return github.PaginatedList.PaginatedList( + github.Autolink.Autolink, self._requester, f"{self.url}/autolinks", None + ) + def create_file( self, path, @@ -3509,6 +3535,20 @@ def remove_self_hosted_runner(self, runner): ) return status == 204 + def remove_autolink(self, autolink): + """ + :calls: `DELETE /repos/{owner}/{repo}/autolinks/{id} `_ + :param autolink: int or :class:`github.Autolink.Autolink` + :rtype: None + """ + is_autolink = isinstance(autolink, github.Autolink.Autolink) + assert is_autolink or isinstance(autolink, int), autolink + + status, _, _ = self._requester.requestJson( + "DELETE", f"{self.url}/autolinks/{autolink.id if is_autolink else autolink}" + ) + return status == 204 + def subscribe_to_hub(self, event, callback, secret=github.GithubObject.NotSet): """ :calls: `POST /hub `_ diff --git a/github/Repository.pyi b/github/Repository.pyi index 16a0a0a65a..705df58bd4 100644 --- a/github/Repository.pyi +++ b/github/Repository.pyi @@ -3,6 +3,7 @@ from typing import Any, Dict, List, Optional, Union, overload from github.Artifact import Artifact from github.AuthenticatedUser import AuthenticatedUser +from github.Autolink import Autolink from github.Branch import Branch from github.CheckRun import CheckRun from github.CheckSuite import CheckSuite @@ -104,6 +105,7 @@ class Repository(CompletableGithubObject): def contents_url(self) -> str: ... @property def contributors_url(self) -> str: ... + def create_autolink(self, key_prefix: str, url_template: str) -> Autolink: ... def create_check_run( self, name: str, @@ -311,6 +313,7 @@ class Repository(CompletableGithubObject): def get_artifact(self) -> Artifact: ... def get_artifacts(self) -> PaginatedList[Artifact]: ... def get_assignees(self) -> PaginatedList[NamedUser]: ... + def get_autolinks(self) -> PaginatedList[Autolink]: ... def get_branch(self, branch: str) -> Branch: ... def rename_branch(self, branch: Union[str, Branch], new_name: str) -> bool: ... def get_branches(self) -> PaginatedList[Branch]: ... @@ -561,6 +564,7 @@ class Repository(CompletableGithubObject): def pushed_at(self) -> datetime: ... @property def releases_url(self) -> str: ... + def remove_autolink(self, autolink: Union[Autolink, int]) -> bool: ... def remove_from_collaborators( self, collaborator: Union[str, NamedUser] ) -> None: ... diff --git a/tests/Autolink.py b/tests/Autolink.py new file mode 100644 index 0000000000..e363e3cb94 --- /dev/null +++ b/tests/Autolink.py @@ -0,0 +1,45 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2021 Marco Köpcke # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ +from tests import Framework + + +class Autolink(Framework.TestCase): + def setUp(self): + super().setUp() + # When recording test, be sure to create a autolink for yourself on + # Github and update it here. + links = [ + x + for x in self.g.get_user("theCapypara").get_repo("PyGithub").get_autolinks() + if x.id == 209614 + ] + self.assertEqual( + 1, len(links), "There must be exactly one autolink with the ID 209614." + ) + self.link = links[0] + + def testAttributes(self): + self.assertEqual(self.link.id, 209614) + self.assertEqual(self.link.key_prefix, "DUMMY-") + self.assertEqual( + self.link.url_template, "https://github.com/PyGithub/PyGithub/issues/" + ) diff --git a/tests/ReplayData/Autolink.setUp.txt b/tests/ReplayData/Autolink.setUp.txt new file mode 100644 index 0000000000..456b4d6f84 --- /dev/null +++ b/tests/ReplayData/Autolink.setUp.txt @@ -0,0 +1,33 @@ +https +GET +api.github.com +None +/users/theCapypara +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Tue, 02 Nov 2021 13:15:54 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"83d2773e24c62f5474d8c7daf73e643ed3be693772d094ee8fb97974adc777f4"'), ('Last-Modified', 'Tue, 02 Nov 2021 11:36:31 GMT'), ('X-OAuth-Scopes', 'admin:repo_hook, repo'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2021-11-09 12:40:40 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4893'), ('X-RateLimit-Reset', '1635859633'), ('X-RateLimit-Used', '107'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'C176:C803:15A3D94:1617DEA:61813A0A')] +{"login":"theCapypara","id":3512122,"node_id":"MDQ6VXNlcjM1MTIxMjI=","avatar_url":"https://avatars.githubusercontent.com/u/3512122?v=4","gravatar_id":"","url":"https://api.github.com/users/theCapypara","html_url":"https://github.com/theCapypara","followers_url":"https://api.github.com/users/theCapypara/followers","following_url":"https://api.github.com/users/theCapypara/following{/other_user}","gists_url":"https://api.github.com/users/theCapypara/gists{/gist_id}","starred_url":"https://api.github.com/users/theCapypara/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/theCapypara/subscriptions","organizations_url":"https://api.github.com/users/theCapypara/orgs","repos_url":"https://api.github.com/users/theCapypara/repos","events_url":"https://api.github.com/users/theCapypara/events{/privacy}","received_events_url":"https://api.github.com/users/theCapypara/received_events","type":"User","site_admin":false,"name":"Marco Köpcke","company":"@tudock","blog":"https://www.linkedin.com/in/marco-koepcke/","location":null,"email":"hello@capypara.de","hireable":null,"bio":"aka. Parakoopa ---\r\nProfessional Magento 2 developer that loves creating tools that help other developers.... And other weird & fun side projects :)","twitter_username":null,"public_repos":88,"public_gists":2,"followers":28,"following":16,"created_at":"2013-02-08T14:53:47Z","updated_at":"2021-11-02T11:36:31Z"} + +https +GET +api.github.com +None +/repos/theCapypara/PyGithub +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Tue, 02 Nov 2021 13:15:54 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"d3e74e88c2d48ed5cea0756eba6e373973531859ea786baa58ac755d0c6e301b"'), ('Last-Modified', 'Thu, 14 Oct 2021 13:44:46 GMT'), ('X-OAuth-Scopes', 'admin:repo_hook, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2021-11-09 12:40:40 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4892'), ('X-RateLimit-Reset', '1635859633'), ('X-RateLimit-Used', '108'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'C178:78E3:182FE59:18A8701:61813A0A')] +{"id":392376264,"node_id":"MDEwOlJlcG9zaXRvcnkzOTIzNzYyNjQ=","name":"PyGithub","full_name":"theCapypara/PyGithub","private":false,"owner":{"login":"theCapypara","id":3512122,"node_id":"MDQ6VXNlcjM1MTIxMjI=","avatar_url":"https://avatars.githubusercontent.com/u/3512122?v=4","gravatar_id":"","url":"https://api.github.com/users/theCapypara","html_url":"https://github.com/theCapypara","followers_url":"https://api.github.com/users/theCapypara/followers","following_url":"https://api.github.com/users/theCapypara/following{/other_user}","gists_url":"https://api.github.com/users/theCapypara/gists{/gist_id}","starred_url":"https://api.github.com/users/theCapypara/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/theCapypara/subscriptions","organizations_url":"https://api.github.com/users/theCapypara/orgs","repos_url":"https://api.github.com/users/theCapypara/repos","events_url":"https://api.github.com/users/theCapypara/events{/privacy}","received_events_url":"https://api.github.com/users/theCapypara/received_events","type":"User","site_admin":false},"html_url":"https://github.com/theCapypara/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/theCapypara/PyGithub","forks_url":"https://api.github.com/repos/theCapypara/PyGithub/forks","keys_url":"https://api.github.com/repos/theCapypara/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/theCapypara/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/theCapypara/PyGithub/teams","hooks_url":"https://api.github.com/repos/theCapypara/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/theCapypara/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/theCapypara/PyGithub/events","assignees_url":"https://api.github.com/repos/theCapypara/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/theCapypara/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/theCapypara/PyGithub/tags","blobs_url":"https://api.github.com/repos/theCapypara/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/theCapypara/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/theCapypara/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/theCapypara/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/theCapypara/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/theCapypara/PyGithub/languages","stargazers_url":"https://api.github.com/repos/theCapypara/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/theCapypara/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/theCapypara/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/theCapypara/PyGithub/subscription","commits_url":"https://api.github.com/repos/theCapypara/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/theCapypara/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/theCapypara/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/theCapypara/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/theCapypara/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/theCapypara/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/theCapypara/PyGithub/merges","archive_url":"https://api.github.com/repos/theCapypara/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/theCapypara/PyGithub/downloads","issues_url":"https://api.github.com/repos/theCapypara/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/theCapypara/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/theCapypara/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/theCapypara/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/theCapypara/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/theCapypara/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/theCapypara/PyGithub/deployments","created_at":"2021-08-03T16:10:46Z","updated_at":"2021-10-14T13:44:46Z","pushed_at":"2021-10-14T13:44:37Z","git_url":"git://github.com/theCapypara/PyGithub.git","ssh_url":"git@github.com:theCapypara/PyGithub.git","clone_url":"https://github.com/theCapypara/PyGithub.git","svn_url":"https://github.com/theCapypara/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13474,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"master","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":true,"allow_rebase_merge":true,"allow_auto_merge":false,"delete_branch_on_merge":false,"parent":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2021-11-02T12:35:21Z","pushed_at":"2021-11-02T08:12:52Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13577,"stargazers_count":4744,"watchers_count":4744,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1397,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":143,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1397,"open_issues":143,"watchers":4744,"default_branch":"master"},"source":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2021-11-02T12:35:21Z","pushed_at":"2021-11-02T08:12:52Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13577,"stargazers_count":4744,"watchers_count":4744,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1397,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":143,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"topics":["github","github-api","pygithub","python"],"visibility":"public","forks":1397,"open_issues":143,"watchers":4744,"default_branch":"master"},"network_count":1397,"subscribers_count":0} + +https +GET +api.github.com +None +/repos/theCapypara/PyGithub/autolinks +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Tue, 02 Nov 2021 13:15:54 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"535a973f8ad8495063caa679cdbf106f079769e4c6060713042dc3a9fc844b87"'), ('X-OAuth-Scopes', 'admin:repo_hook, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2021-11-09 12:40:40 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4891'), ('X-RateLimit-Reset', '1635859633'), ('X-RateLimit-Used', '109'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'C17A:34FD:E2AD69:E8E4C0:61813A0A')] +[{"id":209614,"key_prefix":"DUMMY-","url_template":"https://github.com/PyGithub/PyGithub/issues/"}] + diff --git a/tests/ReplayData/Repository.testCreateAutolink.txt b/tests/ReplayData/Repository.testCreateAutolink.txt new file mode 100644 index 0000000000..2439bbbe07 --- /dev/null +++ b/tests/ReplayData/Repository.testCreateAutolink.txt @@ -0,0 +1,11 @@ +https +POST +api.github.com +None +/repos/jacquev6/PyGithub/autolinks +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"key_prefix": "DUMMY-", "url_template": "https://github.com/PyGithub/PyGithub/issues/"} +201 +[('Server', 'GitHub.com'), ('Date', 'Tue, 02 Nov 2021 12:57:55 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '102'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', '"f90a1a598b996d3d1967b96c218459edde984e62d452623ff4aba2530a256b85"'), ('X-OAuth-Scopes', 'admin:repo_hook, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2021-11-09 12:40:40 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4947'), ('X-RateLimit-Reset', '1635859633'), ('X-RateLimit-Used', '53'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('X-GitHub-Request-Id', 'C6E6:34FE:190079B:197523C:618135D3')] +{"id":209614,"key_prefix":"DUMMY-","url_template":"https://github.com/PyGithub/PyGithub/issues/"} + diff --git a/tests/ReplayData/Repository.testGetAutolinks.txt b/tests/ReplayData/Repository.testGetAutolinks.txt new file mode 100644 index 0000000000..92e5a8ea58 --- /dev/null +++ b/tests/ReplayData/Repository.testGetAutolinks.txt @@ -0,0 +1,11 @@ +https +GET +api.github.com +None +/repos/jacquev6/PyGithub/autolinks +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Tue, 02 Nov 2021 13:01:39 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"4d453f5f31fb634e68e615083db0c61dc2d1925cd6f16586a81b24e2369872ba"'), ('X-OAuth-Scopes', 'admin:repo_hook, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2021-11-09 12:40:40 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4944'), ('X-RateLimit-Reset', '1635859633'), ('X-RateLimit-Used', '56'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'C11A:B2A9:62722:A8B2E:618136B3')] +[{"id":209614,"key_prefix":"DUMMY-","url_template":"https://github.com/PyGithub/PyGithub/issues/"},{"id":209611,"key_prefix":"TEST-","url_template":"https://github.com/PyGithub/PyGithub/issues/"}] + diff --git a/tests/ReplayData/Repository.testRemoveAutolink.txt b/tests/ReplayData/Repository.testRemoveAutolink.txt new file mode 100644 index 0000000000..917da8ff6c --- /dev/null +++ b/tests/ReplayData/Repository.testRemoveAutolink.txt @@ -0,0 +1,11 @@ +https +DELETE +api.github.com +None +/repos/jacquev6/PyGithub/autolinks/209611 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +204 +[('Server', 'GitHub.com'), ('Date', 'Tue, 02 Nov 2021 13:05:13 GMT'), ('X-OAuth-Scopes', 'admin:repo_hook, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2021-11-09 12:40:40 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4941'), ('X-RateLimit-Reset', '1635859633'), ('X-RateLimit-Used', '59'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('X-GitHub-Request-Id', 'C120:10BD6:34C209:39806B:61813789')] + + diff --git a/tests/Repository.py b/tests/Repository.py index 74f1b05e38..95bf5e4fbd 100644 --- a/tests/Repository.py +++ b/tests/Repository.py @@ -258,6 +258,12 @@ def testCreateGitRef(self): "https://api.github.com/repos/jacquev6/PyGithub/git/refs/heads/BranchCreatedByPyGithub", ) + def testCreateAutolink(self): + key = self.repo.create_autolink( + "DUMMY-", "https://github.com/PyGithub/PyGithub/issues/" + ) + self.assertEqual(key.id, 209614) + def testCreateGitBlob(self): blob = self.repo.create_git_blob("Blob created by PyGithub", "latin1") self.assertEqual(blob.sha, "5dd930f591cd5188e9ea7200e308ad355182a1d8") @@ -478,6 +484,9 @@ def testGetPendingInvitations(self): def testRemoveInvitation(self): self.repo.remove_invitation(17285388) + def testRemoveAutolink(self): + self.repo.remove_autolink(209611) + def testCollaboratorPermissionNoPushAccess(self): with self.assertRaises(github.GithubException) as raisedexp: self.repo.get_collaborator_permission("lyloa") @@ -1170,6 +1179,16 @@ def testGetPullsWithArguments(self): self.repo.get_pulls("closed"), lambda p: p.id, [1448168, 1436310, 1436215] ) + def testGetAutolinks(self): + self.assertListKeyEqual( + self.repo.get_autolinks(), + lambda i: i.id, + [ + 209614, + 209611, + ], + ) + def testLegacySearchIssues(self): issues = self.repo.legacy_search_issues("open", "search") self.assertListKeyEqual(issues, lambda i: i.title, ["Support new Search API"]) From 3a6235b56eecc0e193c1e267b064c155c6ebc022 Mon Sep 17 00:00:00 2001 From: Gabriele Oliaro Date: Fri, 28 Oct 2022 23:26:24 -0400 Subject: [PATCH 12/32] [WorkflowRun] - Add missing attributes (`run_started_at` & `run_attempt`), remove deprecated `unicode` type (#2273) --- github/WorkflowRun.py | 27 +++++++++++++++++++ scripts/add_attribute.py | 2 +- .../ExposeAllAttributes.testAllClasses.txt | 4 +-- tests/ReplayData/PullRequest.testGetFiles.txt | 2 +- tests/ReplayData/PullRequestFile.setUp.txt | 2 +- 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/github/WorkflowRun.py b/github/WorkflowRun.py index 2846c9d4ce..1e8e00e4de 100644 --- a/github/WorkflowRun.py +++ b/github/WorkflowRun.py @@ -60,6 +60,14 @@ def head_sha(self): self._completeIfNotSet(self._head_sha) return self._head_sha.value + @property + def run_attempt(self): + """ + :type: integer + """ + self._completeIfNotSet(self._run_attempt) + return self._run_attempt.value + @property def run_number(self): """ @@ -76,6 +84,14 @@ def event(self): self._completeIfNotSet(self._event) return self._event.value + @property + def run_started_at(self): + """ + :type: datetime.datetime + """ + self._completeIfNotSet(self._run_started_at) + return self._run_started_at.value + @property def status(self): """ @@ -266,8 +282,10 @@ def _initAttributes(self): self._id = github.GithubObject.NotSet self._head_branch = github.GithubObject.NotSet self._head_sha = github.GithubObject.NotSet + self._run_attempt = github.GithubObject.NotSet self._run_number = github.GithubObject.NotSet self._event = github.GithubObject.NotSet + self._run_started_at = github.GithubObject.NotSet self._status = github.GithubObject.NotSet self._conclusion = github.GithubObject.NotSet self._workflow_id = github.GithubObject.NotSet @@ -294,10 +312,19 @@ def _useAttributes(self, attributes): self._head_branch = self._makeStringAttribute(attributes["head_branch"]) if "head_sha" in attributes: # pragma no branch self._head_sha = self._makeStringAttribute(attributes["head_sha"]) + if "run_attempt" in attributes: # pragma no branch + self._run_attempt = self._makeIntAttribute(attributes["run_attempt"]) if "run_number" in attributes: # pragma no branch self._run_number = self._makeIntAttribute(attributes["run_number"]) if "event" in attributes: # pragma no branch self._event = self._makeStringAttribute(attributes["event"]) + if "run_started_at" in attributes: # pragma no branch + assert attributes["run_started_at"] is None or isinstance( + attributes["run_started_at"], str + ), attributes["run_started_at"] + self._run_started_at = self._makeDatetimeAttribute( + attributes["run_started_at"] + ) if "status" in attributes: # pragma no branch self._status = self._makeStringAttribute(attributes["status"]) if "conclusion" in attributes: # pragma no branch diff --git a/scripts/add_attribute.py b/scripts/add_attribute.py index 73bc1a58c5..38d01f0261 100644 --- a/scripts/add_attribute.py +++ b/scripts/add_attribute.py @@ -55,7 +55,7 @@ ), "datetime": ( "datetime.datetime", - "(str, unicode)", + "str", 'self._makeDatetimeAttribute(attributes["' + attributeName + '"])', ), "class": ( diff --git a/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt b/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt index 305c16af81..5a3cb71a52 100644 --- a/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt +++ b/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt @@ -249,7 +249,7 @@ None None 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4874'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('x-github-request-id', '2e2d4c57-e963-4381-985e-9c6ca34a5692'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '175951'), ('server', 'GitHub.com'), ('last-modified', 'Fri, 06 Sep 2013 12:51:22 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '"654d1a29abe3a61b096e8bffbc61c162"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Fri, 06 Sep 2013 15:05:32 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1378482241')] -[{"sha":"fb4855905c4825612bdd2db42346833c203e77c8","filename":"codegen/templates/GithubObject.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/codegen/templates/GithubObject.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -70,7 +70,7 @@ def __useAttributes( self, attributes ):\n \n # @todo No need to check if attribute is in attributes when attribute is mandatory\n {% for attribute in class.attributes|dictsort:\"name\" %}\n- if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None:\n+ if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None: # pragma no branch\n \n {% if attribute.type.cardinality == \"scalar\" %}\n {% if attribute.type.simple %}"},{"sha":"502f657077e67378a09cd923d8b7629a81469d81","filename":"src/github/AuthenticatedUser.py","status":"modified","additions":25,"deletions":25,"changes":50,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/AuthenticatedUser.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -568,78 +568,78 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], ( str, unicode ) )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], ( str, unicode ) )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], ( str, unicode ) )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], ( str, unicode ) )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], ( str, unicode ) )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], ( str, unicode ) )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], ( str, unicode ) )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"2c2e7ad5c7d5f5f6bbb16bc4149cc2388b870d63","filename":"src/github/Authorization.py","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Authorization.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -117,21 +117,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"app\", \"created_at\", \"id\", \"note\", \"note_url\", \"scopes\", \"token\", \"updated_at\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"app\" in attributes and attributes[ \"app\" ] is not None:\n+ if \"app\" in attributes and attributes[ \"app\" ] is not None: # pragma no branch\n self.__app = attributes[ \"app\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"note\" in attributes and attributes[ \"note\" ] is not None:\n+ if \"note\" in attributes and attributes[ \"note\" ] is not None: # pragma no branch\n self.__note = attributes[ \"note\" ]\n- if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None:\n+ if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None: # pragma no branch\n self.__note_url = attributes[ \"note_url\" ]\n- if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None:\n+ if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None: # pragma no branch\n self.__scopes = attributes[ \"scopes\" ]\n- if \"token\" in attributes and attributes[ \"token\" ] is not None:\n+ if \"token\" in attributes and attributes[ \"token\" ] is not None: # pragma no branch\n self.__token = attributes[ \"token\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"96ae96478e61087c378e8f5caaf8064ba3b5d9ff","filename":"src/github/Branch.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Branch.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -28,9 +28,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]"},{"sha":"bef139283f26710febfd03d3cce3a9193dbbde22","filename":"src/github/Commit.py","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Commit.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -120,33 +120,33 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"commit\", \"committer\", \"files\", \"parents\", \"sha\", \"stats\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = NamedUser.NamedUser( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = GitCommit.GitCommit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = NamedUser.NamedUser( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"files\" ], list ) and ( len( attributes[ \"files\" ] ) == 0 or isinstance( attributes[ \"files\" ][ 0 ], dict ) )\n self.__files = [\n CommitFile.CommitFile( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"files\" ]\n ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n Commit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"stats\" in attributes and attributes[ \"stats\" ] is not None:\n+ if \"stats\" in attributes and attributes[ \"stats\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"stats\" ], dict )\n self.__stats = CommitStats.CommitStats( self.__requester, attributes[ \"stats\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"6e95e0bac8d227daedbcff076a182a762f4e7229","filename":"src/github/CommitComment.py","status":"modified","additions":11,"deletions":11,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/CommitComment.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -121,36 +121,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], ( str, unicode ) )\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], ( str, unicode ) )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"line\" ], int )\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], ( str, unicode ) )\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"position\" ], int )\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"27185b984a57346b0ef4f591b08f9398b1d1cb83","filename":"src/github/CommitFile.py","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/CommitFile.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]"},{"sha":"772d0eedaf7cf55d3e3e7c6ad040d17de3ec5f80","filename":"src/github/CommitStats.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/CommitStats.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"deletions\", \"total\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"additions\" ], int )\n self.__additions = attributes[ \"additions\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"deletions\" ], int )\n self.__deletions = attributes[ \"deletions\" ]\n- if \"total\" in attributes and attributes[ \"total\" ] is not None:\n+ if \"total\" in attributes and attributes[ \"total\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total\" ], int )\n self.__total = attributes[ \"total\" ]"},{"sha":"28c49231bb6c27f102b9f5d42505764cdcb79089","filename":"src/github/Download.py","status":"modified","additions":20,"deletions":20,"changes":40,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Download.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -162,43 +162,43 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"accesskeyid\", \"acl\", \"bucket\", \"content_type\", \"created_at\", \"description\", \"download_count\", \"expirationdate\", \"html_url\", \"id\", \"mime_type\", \"name\", \"path\", \"policy\", \"prefix\", \"redirect\", \"s3_url\", \"signature\", \"size\", \"url\", \"x-amz-meta-content-disposition\" ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None:\n+ if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None: # pragma no branch\n self.__accesskeyid = attributes[ \"accesskeyid\" ]\n- if \"acl\" in attributes and attributes[ \"acl\" ] is not None:\n+ if \"acl\" in attributes and attributes[ \"acl\" ] is not None: # pragma no branch\n self.__acl = attributes[ \"acl\" ]\n- if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None:\n+ if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None: # pragma no branch\n self.__bucket = attributes[ \"bucket\" ]\n- if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None:\n+ if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None: # pragma no branch\n self.__content_type = attributes[ \"content_type\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n self.__description = attributes[ \"description\" ]\n- if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None:\n+ if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None: # pragma no branch\n self.__download_count = attributes[ \"download_count\" ]\n- if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None:\n+ if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None: # pragma no branch\n self.__expirationdate = attributes[ \"expirationdate\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None:\n+ if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None: # pragma no branch\n self.__mime_type = attributes[ \"mime_type\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"policy\" in attributes and attributes[ \"policy\" ] is not None:\n+ if \"policy\" in attributes and attributes[ \"policy\" ] is not None: # pragma no branch\n self.__policy = attributes[ \"policy\" ]\n- if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None:\n+ if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None: # pragma no branch\n self.__prefix = attributes[ \"prefix\" ]\n- if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None:\n+ if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None: # pragma no branch\n self.__redirect = attributes[ \"redirect\" ]\n- if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None:\n+ if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None: # pragma no branch\n self.__s3_url = attributes[ \"s3_url\" ]\n- if \"signature\" in attributes and attributes[ \"signature\" ] is not None:\n+ if \"signature\" in attributes and attributes[ \"signature\" ] is not None: # pragma no branch\n self.__signature = attributes[ \"signature\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"f04618e50b93c36d1b454fd3c04eda2304c3f953","filename":"src/github/Event.py","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Event.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -60,22 +60,22 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"created_at\", \"id\", \"org\", \"payload\", \"public\", \"repo\", \"type\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"org\" in attributes and attributes[ \"org\" ] is not None:\n+ if \"org\" in attributes and attributes[ \"org\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"org\" ], dict )\n self.__org = Organization.Organization( self.__requester, attributes[ \"org\" ], completion = LazyCompletion )\n- if \"payload\" in attributes and attributes[ \"payload\" ] is not None:\n+ if \"payload\" in attributes and attributes[ \"payload\" ] is not None: # pragma no branch\n self.__payload = attributes[ \"payload\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n self.__public = attributes[ \"public\" ]\n- if \"repo\" in attributes and attributes[ \"repo\" ] is not None:\n+ if \"repo\" in attributes and attributes[ \"repo\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repo\" ], dict )\n self.__repo = Repository.Repository( self.__requester, attributes[ \"repo\" ], completion = LazyCompletion )\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n self.__type = attributes[ \"type\" ]"},{"sha":"56bd080c75f4063321baab79027bddbf48a23063","filename":"src/github/Gist.py","status":"modified","additions":15,"deletions":15,"changes":30,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Gist.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -220,53 +220,53 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"comments\", \"created_at\", \"description\", \"files\", \"fork_of\", \"forks\", \"git_pull_url\", \"git_push_url\", \"history\", \"html_url\", \"id\", \"public\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], ( str, unicode ) )\n self.__description = attributes[ \"description\" ]\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n self.__files = attributes[ \"files\" ]\n- if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None:\n+ if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork_of\" ], dict )\n self.__fork_of = Gist( self.__requester, attributes[ \"fork_of\" ], completion = LazyCompletion )\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], list ) and ( len( attributes[ \"forks\" ] ) == 0 or isinstance( attributes[ \"forks\" ][ 0 ], dict ) )\n self.__forks = [\n Gist( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"forks\" ]\n ]\n- if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None:\n+ if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_pull_url\" ], ( str, unicode ) )\n self.__git_pull_url = attributes[ \"git_pull_url\" ]\n- if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None:\n+ if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_push_url\" ], ( str, unicode ) )\n self.__git_push_url = attributes[ \"git_push_url\" ]\n- if \"history\" in attributes and attributes[ \"history\" ] is not None:\n+ if \"history\" in attributes and attributes[ \"history\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"history\" ], list ) and ( len( attributes[ \"history\" ] ) == 0 or isinstance( attributes[ \"history\" ][ 0 ], dict ) )\n self.__history = [\n GistHistoryState.GistHistoryState( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"history\" ]\n ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], ( str, unicode ) )\n self.__id = attributes[ \"id\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public\" ], bool )\n self.__public = attributes[ \"public\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"a595ca288f230fbe30416bc854cc8df51682fb65","filename":"src/github/GistComment.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GistComment.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"d325a2b14180a808327beb752c8365467ff4872f","filename":"src/github/GistHistoryState.py","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GistHistoryState.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -44,18 +44,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"change_status\", \"committed_at\", \"url\", \"user\", \"version\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None:\n+ if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"change_status\" ], dict )\n self.__change_status = CommitStats.CommitStats( self.__requester, attributes[ \"change_status\" ], completion = LazyCompletion )\n- if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None:\n+ if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committed_at\" ], ( str, unicode ) )\n self.__committed_at = attributes[ \"committed_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )\n- if \"version\" in attributes and attributes[ \"version\" ] is not None:\n+ if \"version\" in attributes and attributes[ \"version\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"version\" ], ( str, unicode ) )\n self.__version = attributes[ \"version\" ]"},{"sha":"2c710f56cfbe950099e74565680aee6ef2a20402","filename":"src/github/GitAuthor.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitAuthor.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"date\", \"email\", \"name\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"date\" in attributes and attributes[ \"date\" ] is not None:\n+ if \"date\" in attributes and attributes[ \"date\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"date\" ], ( str, unicode ) )\n self.__date = attributes[ \"date\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]"},{"sha":"4defbde8b71269490ca951e836b5b1e1c540cb64","filename":"src/github/GitBlob.py","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitBlob.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -42,18 +42,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"content\", \"encoding\", \"sha\", \"size\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"content\" in attributes and attributes[ \"content\" ] is not None:\n+ if \"content\" in attributes and attributes[ \"content\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"content\" ], ( str, unicode ) )\n self.__content = attributes[ \"content\" ]\n- if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None:\n+ if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"encoding\" ], ( str, unicode ) )\n self.__encoding = attributes[ \"encoding\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"13382cd7ac3c062fdb71e0873b223dbdd18f244e","filename":"src/github/GitCommit.py","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitCommit.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -55,27 +55,27 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"committer\", \"message\", \"parents\", \"sha\", \"tree\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = GitAuthor.GitAuthor( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = GitAuthor.GitAuthor( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], ( str, unicode ) )\n self.__message = attributes[ \"message\" ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n GitCommit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], dict )\n self.__tree = GitTree.GitTree( self.__requester, attributes[ \"tree\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"05e3067c1014ce22ced1faca83a74fa9215fd97e","filename":"src/github/GitObject.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitObject.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"bfc8d91335cf0f81694a81ce534d79988f1bb0fe","filename":"src/github/GitRef.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitRef.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -55,12 +55,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"object\", \"ref\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"ref\" in attributes and attributes[ \"ref\" ] is not None:\n+ if \"ref\" in attributes and attributes[ \"ref\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ref\" ], ( str, unicode ) )\n self.__ref = attributes[ \"ref\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"532d3a056c2490883f826da7369067a24d001055","filename":"src/github/GitTag.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitTag.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -49,21 +49,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"message\", \"object\", \"sha\", \"tag\", \"tagger\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], ( str, unicode ) )\n self.__message = attributes[ \"message\" ]\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"tag\" in attributes and attributes[ \"tag\" ] is not None:\n+ if \"tag\" in attributes and attributes[ \"tag\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tag\" ], ( str, unicode ) )\n self.__tag = attributes[ \"tag\" ]\n- if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None:\n+ if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tagger\" ], dict )\n self.__tagger = GitAuthor.GitAuthor( self.__requester, attributes[ \"tagger\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"321f54fc52bcb0ac7843ecf9de53c091e2ad942c","filename":"src/github/GitTree.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitTree.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -33,15 +33,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"tree\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], list ) and ( len( attributes[ \"tree\" ] ) == 0 or isinstance( attributes[ \"tree\" ][ 0 ], dict ) )\n self.__tree = [\n GitTreeElement.GitTreeElement( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"tree\" ]\n ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"97ff07009a4af0d1bacc2c404dbbbff58700b359","filename":"src/github/GitTreeElement.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitTreeElement.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -47,21 +47,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"mode\", \"path\", \"sha\", \"size\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"mode\" in attributes and attributes[ \"mode\" ] is not None:\n+ if \"mode\" in attributes and attributes[ \"mode\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mode\" ], ( str, unicode ) )\n self.__mode = attributes[ \"mode\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], ( str, unicode ) )\n self.__path = attributes[ \"path\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"9ac71aa29d8287d57b4d2109754f9da1b0a13fb7","filename":"src/github/Hook.py","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Hook.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -99,21 +99,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"active\", \"config\", \"created_at\", \"events\", \"id\", \"last_response\", \"name\", \"updated_at\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"active\" in attributes and attributes[ \"active\" ] is not None:\n+ if \"active\" in attributes and attributes[ \"active\" ] is not None: # pragma no branch\n self.__active = attributes[ \"active\" ]\n- if \"config\" in attributes and attributes[ \"config\" ] is not None:\n+ if \"config\" in attributes and attributes[ \"config\" ] is not None: # pragma no branch\n self.__config = attributes[ \"config\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"events\" in attributes and attributes[ \"events\" ] is not None:\n+ if \"events\" in attributes and attributes[ \"events\" ] is not None: # pragma no branch\n self.__events = attributes[ \"events\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None:\n+ if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None: # pragma no branch\n self.__last_response = attributes[ \"last_response\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"8c10440882b7a8a0ce52adacff48066cce006a31","filename":"src/github/Issue.py","status":"modified","additions":32,"deletions":21,"changes":53,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Issue.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -110,7 +110,7 @@ def user( self ):\n return self.__user\n \n def add_to_labels( self, *labels ):\n- post_parameters = labels\n+ post_parameters = [ label.name for label in labels ]\n status, headers, data = self.__requester.request(\n \"POST\",\n str( self.url ) + \"/labels\",\n@@ -131,7 +131,12 @@ def create_comment( self, body ):\n return IssueComment.IssueComment( self.__requester, data, completion = NoCompletion )\n \n def delete_labels( self ):\n- pass\n+ status, headers, data = self.__requester.request(\n+ \"DELETE\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ None\n+ )\n \n def edit( self, title = DefaultValueForOptionalParameters, body = DefaultValueForOptionalParameters, assignee = DefaultValueForOptionalParameters, state = DefaultValueForOptionalParameters, milestone = DefaultValueForOptionalParameters, labels = DefaultValueForOptionalParameters ):\n post_parameters = {\n@@ -216,7 +221,13 @@ def remove_from_labels( self, label ):\n )\n \n def set_labels( self, *labels ):\n- pass\n+ post_parameters = [ label.name for label in labels ]\n+ status, headers, data = self.__requester.request(\n+ \"PUT\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ post_parameters\n+ )\n \n def __initAttributes( self ):\n self.__assignee = None\n@@ -257,59 +268,59 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"assignee\", \"body\", \"closed_at\", \"closed_by\", \"comments\", \"created_at\", \"html_url\", \"id\", \"labels\", \"milestone\", \"number\", \"pull_request\", \"repository\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None:\n+ if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"assignee\" ], dict )\n self.__assignee = NamedUser.NamedUser( self.__requester, attributes[ \"assignee\" ], completion = LazyCompletion )\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], ( str, unicode ) )\n self.__body = attributes[ \"body\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_at\" ], ( str, unicode ) )\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None:\n+ if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_by\" ], dict )\n self.__closed_by = NamedUser.NamedUser( self.__requester, attributes[ \"closed_by\" ], completion = LazyCompletion )\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"labels\" in attributes and attributes[ \"labels\" ] is not None:\n+ if \"labels\" in attributes and attributes[ \"labels\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"labels\" ], list ) and ( len( attributes[ \"labels\" ] ) == 0 or isinstance( attributes[ \"labels\" ][ 0 ], dict ) )\n self.__labels = [\n Label.Label( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"labels\" ]\n ]\n- if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None:\n+ if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"milestone\" ], dict )\n self.__milestone = Milestone.Milestone( self.__requester, attributes[ \"milestone\" ], completion = LazyCompletion )\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None:\n+ if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None: # pragma no branch\n self.__pull_request = attributes[ \"pull_request\" ]\n- if \"repository\" in attributes and attributes[ \"repository\" ] is not None:\n+ if \"repository\" in attributes and attributes[ \"repository\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repository\" ], dict )\n self.__repository = Repository.Repository( self.__requester, attributes[ \"repository\" ], completion = LazyCompletion )\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], ( str, unicode ) )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], ( str, unicode ) )\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"5ed8d8d10b46e6427503e050fdfad6ba22837e25","filename":"src/github/IssueComment.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/IssueComment.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"a276fe9eaea713a8599710636ead83d77023b99f","filename":"src/github/IssueEvent.py","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/IssueEvent.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -78,24 +78,24 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"commit_id\", \"created_at\", \"event\", \"id\", \"issue\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], ( str, unicode ) )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"event\" in attributes and attributes[ \"event\" ] is not None:\n+ if \"event\" in attributes and attributes[ \"event\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"event\" ], ( str, unicode ) )\n self.__event = attributes[ \"event\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"issue\" in attributes and attributes[ \"issue\" ] is not None:\n+ if \"issue\" in attributes and attributes[ \"issue\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"issue\" ], dict )\n self.__issue = Issue.Issue( self.__requester, attributes[ \"issue\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"1f11c4d96625bb675a5c9ce84c813caf4745ff67","filename":"src/github/Label.py","status":"modified","additions":10,"deletions":3,"changes":13,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Label.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -1,6 +1,8 @@\n # WARNING: this file is generated automaticaly.\n # Do not modify it manually, your work would be lost.\n \n+import urllib\n+\n import PaginatedList\n from GithubObject import *\n \n@@ -43,6 +45,11 @@ def edit( self, name, color ):\n )\n self.__useAttributes( data )\n \n+ # @todo Remove '_identity' from the normalized json description\n+ @property\n+ def _identity( self ):\n+ return urllib.quote( self.name )\n+\n def __initAttributes( self ):\n self.__color = None\n self.__name = None\n@@ -53,9 +60,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"color\", \"name\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"color\" in attributes and attributes[ \"color\" ] is not None:\n+ if \"color\" in attributes and attributes[ \"color\" ] is not None: # pragma no branch\n self.__color = attributes[ \"color\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"ffbb51b8941c5bdd34bbc539825666e1155b0699","filename":"src/github/Milestone.py","status":"modified","additions":11,"deletions":11,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Milestone.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -114,36 +114,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"closed_issues\", \"created_at\", \"creator\", \"description\", \"due_on\", \"id\", \"number\", \"open_issues\", \"state\", \"title\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None:\n+ if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_issues\" ], int )\n self.__closed_issues = attributes[ \"closed_issues\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"creator\" in attributes and attributes[ \"creator\" ] is not None:\n+ if \"creator\" in attributes and attributes[ \"creator\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"creator\" ], dict )\n self.__creator = NamedUser.NamedUser( self.__requester, attributes[ \"creator\" ], completion = LazyCompletion )\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], ( str, unicode ) )\n self.__description = attributes[ \"description\" ]\n- if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None:\n+ if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"due_on\" ], ( str, unicode ) )\n self.__due_on = attributes[ \"due_on\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], ( str, unicode ) )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], ( str, unicode ) )\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"61400ed17d9985d2de72dbf8b489de903dbe494e","filename":"src/github/NamedUser.py","status":"modified","additions":26,"deletions":26,"changes":52,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/NamedUser.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -365,81 +365,81 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"contributions\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], ( str, unicode ) )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], ( str, unicode ) )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], ( str, unicode ) )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], ( str, unicode ) )\n self.__company = attributes[ \"company\" ]\n- if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None:\n+ if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"contributions\" ], int )\n self.__contributions = attributes[ \"contributions\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], ( str, unicode ) )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], ( str, unicode ) )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], ( str, unicode ) )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"78ac913ccb12dc01a5064095456078444925ae9e","filename":"src/github/Organization.py","status":"modified","additions":24,"deletions":24,"changes":48,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Organization.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -390,75 +390,75 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"billing_email\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], ( str, unicode ) )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None:\n+ if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"billing_email\" ], ( str, unicode ) )\n self.__billing_email = attributes[ \"billing_email\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], ( str, unicode ) )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], ( str, unicode ) )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], ( str, unicode ) )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], ( str, unicode ) )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], ( str, unicode ) )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]"},{"sha":"043f6f5db4d094d723aafbec7fe54a77205e9f0f","filename":"src/github/Permissions.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Permissions.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"admin\", \"pull\", \"push\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"admin\" in attributes and attributes[ \"admin\" ] is not None:\n+ if \"admin\" in attributes and attributes[ \"admin\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"admin\" ], bool )\n self.__admin = attributes[ \"admin\" ]\n- if \"pull\" in attributes and attributes[ \"pull\" ] is not None:\n+ if \"pull\" in attributes and attributes[ \"pull\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pull\" ], bool )\n self.__pull = attributes[ \"pull\" ]\n- if \"push\" in attributes and attributes[ \"push\" ] is not None:\n+ if \"push\" in attributes and attributes[ \"push\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"push\" ], bool )\n self.__push = attributes[ \"push\" ]"},{"sha":"14ac71bd4920084cd9c8dd2e452c707d82807a64","filename":"src/github/Plan.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Plan.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -37,15 +37,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"collaborators\", \"name\", \"private_repos\", \"space\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None:\n+ if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_repos\" ], int )\n self.__private_repos = attributes[ \"private_repos\" ]\n- if \"space\" in attributes and attributes[ \"space\" ] is not None:\n+ if \"space\" in attributes and attributes[ \"space\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"space\" ], int )\n self.__space = attributes[ \"space\" ]"},{"sha":"07e945e4b49ca0d8cb8e06c124431022765bc8f0","filename":"src/github/PullRequest.py","status":"modified","additions":26,"deletions":26,"changes":52,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/PullRequest.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -279,56 +279,56 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"base\", \"body\", \"changed_files\", \"closed_at\", \"comments\", \"commits\", \"created_at\", \"deletions\", \"diff_url\", \"head\", \"html_url\", \"id\", \"issue_url\", \"mergeable\", \"merged\", \"merged_at\", \"merged_by\", \"number\", \"patch_url\", \"review_comments\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"base\" in attributes and attributes[ \"base\" ] is not None:\n+ if \"base\" in attributes and attributes[ \"base\" ] is not None: # pragma no branch\n self.__base = attributes[ \"base\" ]\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None:\n+ if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None: # pragma no branch\n self.__changed_files = attributes[ \"changed_files\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n self.__comments = attributes[ \"comments\" ]\n- if \"commits\" in attributes and attributes[ \"commits\" ] is not None:\n+ if \"commits\" in attributes and attributes[ \"commits\" ] is not None: # pragma no branch\n self.__commits = attributes[ \"commits\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None:\n+ if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None: # pragma no branch\n self.__diff_url = attributes[ \"diff_url\" ]\n- if \"head\" in attributes and attributes[ \"head\" ] is not None:\n+ if \"head\" in attributes and attributes[ \"head\" ] is not None: # pragma no branch\n self.__head = attributes[ \"head\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None:\n+ if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None: # pragma no branch\n self.__issue_url = attributes[ \"issue_url\" ]\n- if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None:\n+ if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None: # pragma no branch\n self.__mergeable = attributes[ \"mergeable\" ]\n- if \"merged\" in attributes and attributes[ \"merged\" ] is not None:\n+ if \"merged\" in attributes and attributes[ \"merged\" ] is not None: # pragma no branch\n self.__merged = attributes[ \"merged\" ]\n- if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None:\n+ if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None: # pragma no branch\n self.__merged_at = attributes[ \"merged_at\" ]\n- if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None:\n+ if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None: # pragma no branch\n self.__merged_by = attributes[ \"merged_by\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n self.__number = attributes[ \"number\" ]\n- if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None:\n+ if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None: # pragma no branch\n self.__patch_url = attributes[ \"patch_url\" ]\n- if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None:\n+ if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None: # pragma no branch\n self.__review_comments = attributes[ \"review_comments\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"d0095192e606f65fec81882be15aca06ac47e5e3","filename":"src/github/PullRequestComment.py","status":"modified","additions":11,"deletions":11,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/PullRequestComment.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -121,26 +121,26 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"043fb9a5328ad003b449573616e418f17e25bac2","filename":"src/github/PullRequestFile.py","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/PullRequestFile.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]"},{"sha":"30b4bc70dc2a72c52c1cf02e63a26e1cfaf5676e","filename":"src/github/Repository.py","status":"modified","additions":31,"deletions":31,"changes":62,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Repository.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -905,96 +905,96 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"clone_url\", \"created_at\", \"description\", \"fork\", \"forks\", \"full_name\", \"git_url\", \"has_downloads\", \"has_issues\", \"has_wiki\", \"homepage\", \"html_url\", \"id\", \"language\", \"master_branch\", \"mirror_url\", \"name\", \"open_issues\", \"organization\", \"owner\", \"parent\", \"permissions\", \"private\", \"pushed_at\", \"size\", \"source\", \"ssh_url\", \"svn_url\", \"updated_at\", \"url\", \"watchers\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None:\n+ if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"clone_url\" ], ( str, unicode ) )\n self.__clone_url = attributes[ \"clone_url\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], ( str, unicode ) )\n self.__description = attributes[ \"description\" ]\n- if \"fork\" in attributes and attributes[ \"fork\" ] is not None:\n+ if \"fork\" in attributes and attributes[ \"fork\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork\" ], bool )\n self.__fork = attributes[ \"fork\" ]\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], int )\n self.__forks = attributes[ \"forks\" ]\n- if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None:\n+ if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"full_name\" ], ( str, unicode ) )\n self.__full_name = attributes[ \"full_name\" ]\n- if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None:\n+ if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_url\" ], ( str, unicode ) )\n self.__git_url = attributes[ \"git_url\" ]\n- if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None:\n+ if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_downloads\" ], bool )\n self.__has_downloads = attributes[ \"has_downloads\" ]\n- if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None:\n+ if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_issues\" ], bool )\n self.__has_issues = attributes[ \"has_issues\" ]\n- if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None:\n+ if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_wiki\" ], bool )\n self.__has_wiki = attributes[ \"has_wiki\" ]\n- if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None:\n+ if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"homepage\" ], ( str, unicode ) )\n self.__homepage = attributes[ \"homepage\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"language\" in attributes and attributes[ \"language\" ] is not None:\n+ if \"language\" in attributes and attributes[ \"language\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"language\" ], ( str, unicode ) )\n self.__language = attributes[ \"language\" ]\n- if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None:\n+ if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"master_branch\" ], ( str, unicode ) )\n self.__master_branch = attributes[ \"master_branch\" ]\n- if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None:\n+ if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mirror_url\" ], ( str, unicode ) )\n self.__mirror_url = attributes[ \"mirror_url\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"organization\" in attributes and attributes[ \"organization\" ] is not None:\n+ if \"organization\" in attributes and attributes[ \"organization\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"organization\" ], dict )\n self.__organization = Organization.Organization( self.__requester, attributes[ \"organization\" ], completion = LazyCompletion )\n- if \"owner\" in attributes and attributes[ \"owner\" ] is not None:\n+ if \"owner\" in attributes and attributes[ \"owner\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owner\" ], dict )\n self.__owner = NamedUser.NamedUser( self.__requester, attributes[ \"owner\" ], completion = LazyCompletion )\n- if \"parent\" in attributes and attributes[ \"parent\" ] is not None:\n+ if \"parent\" in attributes and attributes[ \"parent\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parent\" ], dict )\n self.__parent = Repository( self.__requester, attributes[ \"parent\" ], completion = LazyCompletion )\n- if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None:\n+ if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"permissions\" ], dict )\n self.__permissions = Permissions.Permissions( self.__requester, attributes[ \"permissions\" ], completion = LazyCompletion )\n- if \"private\" in attributes and attributes[ \"private\" ] is not None:\n+ if \"private\" in attributes and attributes[ \"private\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private\" ], bool )\n self.__private = attributes[ \"private\" ]\n- if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None:\n+ if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pushed_at\" ], ( str, unicode ) )\n self.__pushed_at = attributes[ \"pushed_at\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"source\" in attributes and attributes[ \"source\" ] is not None:\n+ if \"source\" in attributes and attributes[ \"source\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"source\" ], dict )\n self.__source = Repository( self.__requester, attributes[ \"source\" ], completion = LazyCompletion )\n- if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None:\n+ if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ssh_url\" ], ( str, unicode ) )\n self.__ssh_url = attributes[ \"ssh_url\" ]\n- if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None:\n+ if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"svn_url\" ], ( str, unicode ) )\n self.__svn_url = attributes[ \"svn_url\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None:\n+ if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"watchers\" ], int )\n self.__watchers = attributes[ \"watchers\" ]"},{"sha":"fc5cafc09e2b8120e47c2bbdf0e0fa0821ec5ecf","filename":"src/github/RepositoryKey.py","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/RepositoryKey.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]"},{"sha":"7903406c469352d3f3fb897ed9ac9fc9ebc51c3b","filename":"src/github/Tag.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Tag.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -38,15 +38,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", \"tarball_url\", \"zipball_url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None:\n+ if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tarball_url\" ], ( str, unicode ) )\n self.__tarball_url = attributes[ \"tarball_url\" ]\n- if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None:\n+ if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"zipball_url\" ], ( str, unicode ) )\n self.__zipball_url = attributes[ \"zipball_url\" ]"},{"sha":"ca5b7e13476a30fee9234c6f965019f303e3f33e","filename":"src/github/Team.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Team.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -172,15 +172,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"members_count\", \"name\", \"permission\", \"repos_count\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None:\n+ if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None: # pragma no branch\n self.__members_count = attributes[ \"members_count\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"permission\" in attributes and attributes[ \"permission\" ] is not None:\n+ if \"permission\" in attributes and attributes[ \"permission\" ] is not None: # pragma no branch\n self.__permission = attributes[ \"permission\" ]\n- if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None:\n+ if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None: # pragma no branch\n self.__repos_count = attributes[ \"repos_count\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"b7b135d5cf476ece019ca1d018fdf3fc48a450ee","filename":"src/github/UserKey.py","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/UserKey.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]"},{"sha":"c0a781c0bffba244aa2e9826770ccc127f1415af","filename":"test/Issue.py","status":"modified","additions":25,"deletions":1,"changes":26,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/Issue.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -3,7 +3,8 @@\n class Issue( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.issue = self.g.get_user().get_repo( \"PyGithub\" ).get_issue( 28 )\r\n+ self.repo = self.g.get_user().get_repo( \"PyGithub\" )\r\n+ self.issue = self.repo.get_issue( 28 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.issue.assignee.login, \"jacquev6\" )\r\n@@ -47,3 +48,26 @@ def testGetComments( self ):\n \r\n def testGetEvents( self ):\r\n self.assertListKeyEqual( self.issue.get_events(), lambda e: e.id, [ 15819975, 15820048 ] )\r\n+\r\n+ def testGetLabels( self ):\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testAddAndRemoveLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( bug )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\" ] )\r\n+ self.issue.add_to_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testDeleteAndSetLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.delete_labels()\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [] )\r\n+ self.issue.set_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Question\" ] )\r"},{"sha":"77fa51481ceb340a91f3988b7d570d697065ebe8","filename":"test/IssueEvent.py","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/IssueEvent.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -3,13 +3,13 @@\n class IssueEvent( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 15819975 )\r\n+ self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 16348656 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.event.actor.login, \"jacquev6\" )\r\n- self.assertEqual( self.event.commit_id, None )\r\n- self.assertEqual( self.event.created_at, \"2012-05-19T10:38:23Z\" )\r\n- self.assertEqual( self.event.event, \"subscribed\" )\r\n- self.assertEqual( self.event.id, 15819975 )\r\n- self.assertEqual( self.event.issue.number, 28 )\r\n- self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\" )\r\n+ self.assertEqual( self.event.commit_id, \"ed866fc43833802ab553e5ff8581c81bb00dd433\" )\r\n+ self.assertEqual( self.event.created_at, \"2012-05-27T07:29:25Z\" )\r\n+ self.assertEqual( self.event.event, \"referenced\" )\r\n+ self.assertEqual( self.event.id, 16348656 )\r\n+ self.assertEqual( self.event.issue.number, 30 )\r\n+ self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\" )\r"},{"sha":"fb933714353269eb17e70880daacaf9166d4f742","filename":"test/ReplayData/Issue.testAddAndRemoveLabels.txt","status":"added","additions":45,"deletions":0,"changes":45,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/ReplayData/Issue.testAddAndRemoveLabels.txt?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -0,0 +1,45 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4992'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"569c414d87e8ec43ec269a9e28bc2982\"'), ('date', 'Sun, 27 May 2012 09:04:01 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4991'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"b659c8dcc1212c71f826547c3cc7ae99\"'), ('date', 'Sun, 27 May 2012 09:04:02 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4990'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4989'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4986'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:05 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+POST /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4984'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+"},{"sha":"bbd6ae4ea3dac63b301017dece6f56b34eab6f80","filename":"test/ReplayData/Issue.testDeleteAndSetLabels.txt","status":"added","additions":35,"deletions":0,"changes":35,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/ReplayData/Issue.testDeleteAndSetLabels.txt?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -0,0 +1,35 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4974'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fe2e942523eecb156d100829a6347516\"'), ('date', 'Sun, 27 May 2012 09:06:37 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4973'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"931e58d337b2290717303141eda89cd7\"'), ('date', 'Sun, 27 May 2012 09:06:38 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4972'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+204\n+[('status', '204 No Content'), ('x-ratelimit-remaining', '4971'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d41d8cd98f00b204e9800998ecf8427e\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT')]\n+\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4970'), ('content-length', '2'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d751713988987e9331980363e24189ce\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[]\n+\n+PUT /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4969'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4968'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:41 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+"},{"sha":"282dda36da4958e743c70a1cee5b89df0afce592","filename":"test/ReplayData/Issue.testGetLabels.txt","status":"added","additions":5,"deletions":0,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/ReplayData/Issue.testGetLabels.txt?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -0,0 +1,5 @@\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 08:56:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+"},{"sha":"0de7e5358c98a51af4f18e7ff9559f4a826bfebc","filename":"test/ReplayData/IssueEvent.setUp.txt","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/ReplayData/IssueEvent.setUp.txt?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -1,15 +1,15 @@\n GET /user {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4907'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"99c9bfb75395b749e9913a4729126fb5\"'), ('date', 'Sun, 27 May 2012 07:19:30 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"private_gists\":5,\"type\":\"User\",\"company\":\"Criteo\",\"location\":\"Paris, France\",\"hireable\":false,\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"bio\":\"\",\"following\":24,\"blog\":\"http://vincent-jacques.net\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"total_private_repos\":5,\"followers\":13,\"owned_private_repos\":5,\"disk_usage\":16976,\"collaborators\":0,\"html_url\":\"https://github.com/jacquev6\",\"url\":\"https://api.github.com/users/jacquev6\",\"name\":\"Vincent Jacques\",\"login\":\"jacquev6\",\"public_repos\":11,\"public_gists\":3,\"email\":\"vincent@vincent-jacques.net\",\"id\":327146,\"plan\":{\"private_repos\":5,\"collaborators\":1,\"name\":\"micro\",\"space\":614400},\"created_at\":\"2010-07-09T06:10:06Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"8974bb1628a3e3a6d3eb3b08c1b5a46b\"'), ('date', 'Sun, 27 May 2012 07:32:54 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"type\":\"User\",\"bio\":\"\",\"disk_usage\":16976,\"total_private_repos\":5,\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"owned_private_repos\":5,\"collaborators\":0,\"plan\":{\"collaborators\":1,\"private_repos\":5,\"name\":\"micro\",\"space\":614400},\"company\":\"Criteo\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"email\":\"vincent@vincent-jacques.net\",\"public_gists\":3,\"followers\":13,\"name\":\"Vincent Jacques\",\"created_at\":\"2010-07-09T06:10:06Z\",\"blog\":\"http://vincent-jacques.net\",\"location\":\"Paris, France\",\"hireable\":false,\"id\":327146,\"private_gists\":5,\"public_repos\":11,\"following\":24,\"html_url\":\"https://github.com/jacquev6\"}\n \n GET /repos/jacquev6/PyGithub {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4906'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"4c20acf0b23f75bbf25106b1a04f65a5\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"description\":\"Python library implementing the full Github API v3\",\"full_name\":\"jacquev6/PyGithub\",\"has_wiki\":false,\"has_issues\":true,\"updated_at\":\"2012-05-27T06:55:28Z\",\"forks\":3,\"mirror_url\":null,\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"open_issues\":16,\"fork\":false,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"size\":308,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"private\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"owner\":{\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"url\":\"https://api.github.com/users/jacquev6\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"has_downloads\":true,\"language\":\"Python\",\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"id\":3544490,\"permissions\":{\"admin\":true,\"pull\":true,\"push\":true},\"created_at\":\"2012-02-25T12:53:47Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4995'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"f1e4eb3993a364b66b68ec9db42405bd\"'), ('date', 'Sun, 27 May 2012 07:32:55 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"updated_at\":\"2012-05-27T07:29:24Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T07:29:24Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\n \n-GET /repos/jacquev6/PyGithub/issues/events/15819975 {'Authorization': 'Basic login_and_password_removed'} null\n+GET /repos/jacquev6/PyGithub/issues/events/16348656 {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4905'), ('content-length', '2430'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"a3d244842d23f92f69a23e21626fad11\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\",\"issue\":{\"updated_at\":\"2012-05-26T14:59:33Z\",\"body\":\"Body edited by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/28\",\"comments\":0,\"milestone\":{\"creator\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones/1\",\"number\":1,\"title\":\"Version 0.4\",\"due_on\":\"2012-03-13T07:00:00Z\",\"closed_issues\":3,\"open_issues\":0,\"created_at\":\"2012-03-08T12:22:10Z\",\"state\":\"closed\",\"description\":\"\",\"id\":93546},\"number\":28,\"assignee\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"closed_at\":\"2012-05-26T14:59:33Z\",\"title\":\"Issue created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-19T10:38:23Z\",\"state\":\"closed\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"id\":4653757,\"pull_request\":{\"diff_url\":null,\"patch_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/28\"},\"commit_id\":null,\"created_at\":\"2012-05-19T10:38:23Z\",\"event\":\"subscribed\",\"id\":15819975,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146}}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('content-length', '1384'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fefecab09e7355d4ef9875677c2631da\"'), ('date', 'Sun, 27 May 2012 07:32:56 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\",\"issue\":{\"updated_at\":\"2012-05-27T07:27:51Z\",\"body\":\"Body created by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/30\",\"comments\":0,\"milestone\":null,\"number\":30,\"assignee\":null,\"closed_at\":null,\"title\":\"Issue also created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-27T05:40:15Z\",\"state\":\"open\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"},\"id\":4769659,\"pull_request\":{\"patch_url\":null,\"diff_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/30\"},\"commit_id\":\"ed866fc43833802ab553e5ff8581c81bb00dd433\",\"created_at\":\"2012-05-27T07:29:25Z\",\"event\":\"referenced\",\"id\":16348656,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"}}\n "}] +[{"sha":"fb4855905c4825612bdd2db42346833c203e77c8","filename":"codegen/templates/GithubObject.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/codegen/templates/GithubObject.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -70,7 +70,7 @@ def __useAttributes( self, attributes ):\n \n # @todo No need to check if attribute is in attributes when attribute is mandatory\n {% for attribute in class.attributes|dictsort:\"name\" %}\n- if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None:\n+ if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None: # pragma no branch\n \n {% if attribute.type.cardinality == \"scalar\" %}\n {% if attribute.type.simple %}"},{"sha":"502f657077e67378a09cd923d8b7629a81469d81","filename":"src/github/AuthenticatedUser.py","status":"modified","additions":25,"deletions":25,"changes":50,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/AuthenticatedUser.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -568,78 +568,78 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], str )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], str )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], str )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], str )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], str )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], str )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], str )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"2c2e7ad5c7d5f5f6bbb16bc4149cc2388b870d63","filename":"src/github/Authorization.py","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Authorization.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -117,21 +117,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"app\", \"created_at\", \"id\", \"note\", \"note_url\", \"scopes\", \"token\", \"updated_at\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"app\" in attributes and attributes[ \"app\" ] is not None:\n+ if \"app\" in attributes and attributes[ \"app\" ] is not None: # pragma no branch\n self.__app = attributes[ \"app\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"note\" in attributes and attributes[ \"note\" ] is not None:\n+ if \"note\" in attributes and attributes[ \"note\" ] is not None: # pragma no branch\n self.__note = attributes[ \"note\" ]\n- if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None:\n+ if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None: # pragma no branch\n self.__note_url = attributes[ \"note_url\" ]\n- if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None:\n+ if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None: # pragma no branch\n self.__scopes = attributes[ \"scopes\" ]\n- if \"token\" in attributes and attributes[ \"token\" ] is not None:\n+ if \"token\" in attributes and attributes[ \"token\" ] is not None: # pragma no branch\n self.__token = attributes[ \"token\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"96ae96478e61087c378e8f5caaf8064ba3b5d9ff","filename":"src/github/Branch.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Branch.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -28,9 +28,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]"},{"sha":"bef139283f26710febfd03d3cce3a9193dbbde22","filename":"src/github/Commit.py","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Commit.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -120,33 +120,33 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"commit\", \"committer\", \"files\", \"parents\", \"sha\", \"stats\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = NamedUser.NamedUser( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = GitCommit.GitCommit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = NamedUser.NamedUser( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"files\" ], list ) and ( len( attributes[ \"files\" ] ) == 0 or isinstance( attributes[ \"files\" ][ 0 ], dict ) )\n self.__files = [\n CommitFile.CommitFile( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"files\" ]\n ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n Commit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"stats\" in attributes and attributes[ \"stats\" ] is not None:\n+ if \"stats\" in attributes and attributes[ \"stats\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"stats\" ], dict )\n self.__stats = CommitStats.CommitStats( self.__requester, attributes[ \"stats\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"6e95e0bac8d227daedbcff076a182a762f4e7229","filename":"src/github/CommitComment.py","status":"modified","additions":11,"deletions":11,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/CommitComment.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -121,36 +121,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], str )\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], str )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"line\" ], int )\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], str )\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"position\" ], int )\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"27185b984a57346b0ef4f591b08f9398b1d1cb83","filename":"src/github/CommitFile.py","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/CommitFile.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]"},{"sha":"772d0eedaf7cf55d3e3e7c6ad040d17de3ec5f80","filename":"src/github/CommitStats.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/CommitStats.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"deletions\", \"total\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"additions\" ], int )\n self.__additions = attributes[ \"additions\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"deletions\" ], int )\n self.__deletions = attributes[ \"deletions\" ]\n- if \"total\" in attributes and attributes[ \"total\" ] is not None:\n+ if \"total\" in attributes and attributes[ \"total\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total\" ], int )\n self.__total = attributes[ \"total\" ]"},{"sha":"28c49231bb6c27f102b9f5d42505764cdcb79089","filename":"src/github/Download.py","status":"modified","additions":20,"deletions":20,"changes":40,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Download.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -162,43 +162,43 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"accesskeyid\", \"acl\", \"bucket\", \"content_type\", \"created_at\", \"description\", \"download_count\", \"expirationdate\", \"html_url\", \"id\", \"mime_type\", \"name\", \"path\", \"policy\", \"prefix\", \"redirect\", \"s3_url\", \"signature\", \"size\", \"url\", \"x-amz-meta-content-disposition\" ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None:\n+ if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None: # pragma no branch\n self.__accesskeyid = attributes[ \"accesskeyid\" ]\n- if \"acl\" in attributes and attributes[ \"acl\" ] is not None:\n+ if \"acl\" in attributes and attributes[ \"acl\" ] is not None: # pragma no branch\n self.__acl = attributes[ \"acl\" ]\n- if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None:\n+ if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None: # pragma no branch\n self.__bucket = attributes[ \"bucket\" ]\n- if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None:\n+ if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None: # pragma no branch\n self.__content_type = attributes[ \"content_type\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n self.__description = attributes[ \"description\" ]\n- if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None:\n+ if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None: # pragma no branch\n self.__download_count = attributes[ \"download_count\" ]\n- if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None:\n+ if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None: # pragma no branch\n self.__expirationdate = attributes[ \"expirationdate\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None:\n+ if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None: # pragma no branch\n self.__mime_type = attributes[ \"mime_type\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"policy\" in attributes and attributes[ \"policy\" ] is not None:\n+ if \"policy\" in attributes and attributes[ \"policy\" ] is not None: # pragma no branch\n self.__policy = attributes[ \"policy\" ]\n- if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None:\n+ if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None: # pragma no branch\n self.__prefix = attributes[ \"prefix\" ]\n- if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None:\n+ if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None: # pragma no branch\n self.__redirect = attributes[ \"redirect\" ]\n- if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None:\n+ if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None: # pragma no branch\n self.__s3_url = attributes[ \"s3_url\" ]\n- if \"signature\" in attributes and attributes[ \"signature\" ] is not None:\n+ if \"signature\" in attributes and attributes[ \"signature\" ] is not None: # pragma no branch\n self.__signature = attributes[ \"signature\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"f04618e50b93c36d1b454fd3c04eda2304c3f953","filename":"src/github/Event.py","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Event.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -60,22 +60,22 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"created_at\", \"id\", \"org\", \"payload\", \"public\", \"repo\", \"type\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"org\" in attributes and attributes[ \"org\" ] is not None:\n+ if \"org\" in attributes and attributes[ \"org\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"org\" ], dict )\n self.__org = Organization.Organization( self.__requester, attributes[ \"org\" ], completion = LazyCompletion )\n- if \"payload\" in attributes and attributes[ \"payload\" ] is not None:\n+ if \"payload\" in attributes and attributes[ \"payload\" ] is not None: # pragma no branch\n self.__payload = attributes[ \"payload\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n self.__public = attributes[ \"public\" ]\n- if \"repo\" in attributes and attributes[ \"repo\" ] is not None:\n+ if \"repo\" in attributes and attributes[ \"repo\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repo\" ], dict )\n self.__repo = Repository.Repository( self.__requester, attributes[ \"repo\" ], completion = LazyCompletion )\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n self.__type = attributes[ \"type\" ]"},{"sha":"56bd080c75f4063321baab79027bddbf48a23063","filename":"src/github/Gist.py","status":"modified","additions":15,"deletions":15,"changes":30,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Gist.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -220,53 +220,53 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"comments\", \"created_at\", \"description\", \"files\", \"fork_of\", \"forks\", \"git_pull_url\", \"git_push_url\", \"history\", \"html_url\", \"id\", \"public\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], str )\n self.__description = attributes[ \"description\" ]\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n self.__files = attributes[ \"files\" ]\n- if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None:\n+ if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork_of\" ], dict )\n self.__fork_of = Gist( self.__requester, attributes[ \"fork_of\" ], completion = LazyCompletion )\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], list ) and ( len( attributes[ \"forks\" ] ) == 0 or isinstance( attributes[ \"forks\" ][ 0 ], dict ) )\n self.__forks = [\n Gist( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"forks\" ]\n ]\n- if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None:\n+ if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_pull_url\" ], str )\n self.__git_pull_url = attributes[ \"git_pull_url\" ]\n- if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None:\n+ if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_push_url\" ], str )\n self.__git_push_url = attributes[ \"git_push_url\" ]\n- if \"history\" in attributes and attributes[ \"history\" ] is not None:\n+ if \"history\" in attributes and attributes[ \"history\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"history\" ], list ) and ( len( attributes[ \"history\" ] ) == 0 or isinstance( attributes[ \"history\" ][ 0 ], dict ) )\n self.__history = [\n GistHistoryState.GistHistoryState( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"history\" ]\n ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], str )\n self.__id = attributes[ \"id\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public\" ], bool )\n self.__public = attributes[ \"public\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"a595ca288f230fbe30416bc854cc8df51682fb65","filename":"src/github/GistComment.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GistComment.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"d325a2b14180a808327beb752c8365467ff4872f","filename":"src/github/GistHistoryState.py","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GistHistoryState.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -44,18 +44,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"change_status\", \"committed_at\", \"url\", \"user\", \"version\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None:\n+ if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"change_status\" ], dict )\n self.__change_status = CommitStats.CommitStats( self.__requester, attributes[ \"change_status\" ], completion = LazyCompletion )\n- if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None:\n+ if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committed_at\" ], str )\n self.__committed_at = attributes[ \"committed_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )\n- if \"version\" in attributes and attributes[ \"version\" ] is not None:\n+ if \"version\" in attributes and attributes[ \"version\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"version\" ], str )\n self.__version = attributes[ \"version\" ]"},{"sha":"2c710f56cfbe950099e74565680aee6ef2a20402","filename":"src/github/GitAuthor.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitAuthor.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"date\", \"email\", \"name\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"date\" in attributes and attributes[ \"date\" ] is not None:\n+ if \"date\" in attributes and attributes[ \"date\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"date\" ], str )\n self.__date = attributes[ \"date\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]"},{"sha":"4defbde8b71269490ca951e836b5b1e1c540cb64","filename":"src/github/GitBlob.py","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitBlob.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -42,18 +42,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"content\", \"encoding\", \"sha\", \"size\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"content\" in attributes and attributes[ \"content\" ] is not None:\n+ if \"content\" in attributes and attributes[ \"content\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"content\" ], str )\n self.__content = attributes[ \"content\" ]\n- if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None:\n+ if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"encoding\" ], str )\n self.__encoding = attributes[ \"encoding\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"13382cd7ac3c062fdb71e0873b223dbdd18f244e","filename":"src/github/GitCommit.py","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitCommit.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -55,27 +55,27 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"committer\", \"message\", \"parents\", \"sha\", \"tree\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = GitAuthor.GitAuthor( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = GitAuthor.GitAuthor( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], str )\n self.__message = attributes[ \"message\" ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n GitCommit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], dict )\n self.__tree = GitTree.GitTree( self.__requester, attributes[ \"tree\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"05e3067c1014ce22ced1faca83a74fa9215fd97e","filename":"src/github/GitObject.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitObject.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"bfc8d91335cf0f81694a81ce534d79988f1bb0fe","filename":"src/github/GitRef.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitRef.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -55,12 +55,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"object\", \"ref\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"ref\" in attributes and attributes[ \"ref\" ] is not None:\n+ if \"ref\" in attributes and attributes[ \"ref\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ref\" ], str )\n self.__ref = attributes[ \"ref\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"532d3a056c2490883f826da7369067a24d001055","filename":"src/github/GitTag.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitTag.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -49,21 +49,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"message\", \"object\", \"sha\", \"tag\", \"tagger\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], str )\n self.__message = attributes[ \"message\" ]\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"tag\" in attributes and attributes[ \"tag\" ] is not None:\n+ if \"tag\" in attributes and attributes[ \"tag\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tag\" ], str )\n self.__tag = attributes[ \"tag\" ]\n- if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None:\n+ if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tagger\" ], dict )\n self.__tagger = GitAuthor.GitAuthor( self.__requester, attributes[ \"tagger\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"321f54fc52bcb0ac7843ecf9de53c091e2ad942c","filename":"src/github/GitTree.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitTree.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -33,15 +33,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"tree\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], list ) and ( len( attributes[ \"tree\" ] ) == 0 or isinstance( attributes[ \"tree\" ][ 0 ], dict ) )\n self.__tree = [\n GitTreeElement.GitTreeElement( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"tree\" ]\n ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"97ff07009a4af0d1bacc2c404dbbbff58700b359","filename":"src/github/GitTreeElement.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/GitTreeElement.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -47,21 +47,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"mode\", \"path\", \"sha\", \"size\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"mode\" in attributes and attributes[ \"mode\" ] is not None:\n+ if \"mode\" in attributes and attributes[ \"mode\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mode\" ], str )\n self.__mode = attributes[ \"mode\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], str )\n self.__path = attributes[ \"path\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"9ac71aa29d8287d57b4d2109754f9da1b0a13fb7","filename":"src/github/Hook.py","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Hook.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -99,21 +99,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"active\", \"config\", \"created_at\", \"events\", \"id\", \"last_response\", \"name\", \"updated_at\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"active\" in attributes and attributes[ \"active\" ] is not None:\n+ if \"active\" in attributes and attributes[ \"active\" ] is not None: # pragma no branch\n self.__active = attributes[ \"active\" ]\n- if \"config\" in attributes and attributes[ \"config\" ] is not None:\n+ if \"config\" in attributes and attributes[ \"config\" ] is not None: # pragma no branch\n self.__config = attributes[ \"config\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"events\" in attributes and attributes[ \"events\" ] is not None:\n+ if \"events\" in attributes and attributes[ \"events\" ] is not None: # pragma no branch\n self.__events = attributes[ \"events\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None:\n+ if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None: # pragma no branch\n self.__last_response = attributes[ \"last_response\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"8c10440882b7a8a0ce52adacff48066cce006a31","filename":"src/github/Issue.py","status":"modified","additions":32,"deletions":21,"changes":53,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Issue.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -110,7 +110,7 @@ def user( self ):\n return self.__user\n \n def add_to_labels( self, *labels ):\n- post_parameters = labels\n+ post_parameters = [ label.name for label in labels ]\n status, headers, data = self.__requester.request(\n \"POST\",\n str( self.url ) + \"/labels\",\n@@ -131,7 +131,12 @@ def create_comment( self, body ):\n return IssueComment.IssueComment( self.__requester, data, completion = NoCompletion )\n \n def delete_labels( self ):\n- pass\n+ status, headers, data = self.__requester.request(\n+ \"DELETE\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ None\n+ )\n \n def edit( self, title = DefaultValueForOptionalParameters, body = DefaultValueForOptionalParameters, assignee = DefaultValueForOptionalParameters, state = DefaultValueForOptionalParameters, milestone = DefaultValueForOptionalParameters, labels = DefaultValueForOptionalParameters ):\n post_parameters = {\n@@ -216,7 +221,13 @@ def remove_from_labels( self, label ):\n )\n \n def set_labels( self, *labels ):\n- pass\n+ post_parameters = [ label.name for label in labels ]\n+ status, headers, data = self.__requester.request(\n+ \"PUT\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ post_parameters\n+ )\n \n def __initAttributes( self ):\n self.__assignee = None\n@@ -257,59 +268,59 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"assignee\", \"body\", \"closed_at\", \"closed_by\", \"comments\", \"created_at\", \"html_url\", \"id\", \"labels\", \"milestone\", \"number\", \"pull_request\", \"repository\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None:\n+ if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"assignee\" ], dict )\n self.__assignee = NamedUser.NamedUser( self.__requester, attributes[ \"assignee\" ], completion = LazyCompletion )\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], str )\n self.__body = attributes[ \"body\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_at\" ], str )\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None:\n+ if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_by\" ], dict )\n self.__closed_by = NamedUser.NamedUser( self.__requester, attributes[ \"closed_by\" ], completion = LazyCompletion )\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"labels\" in attributes and attributes[ \"labels\" ] is not None:\n+ if \"labels\" in attributes and attributes[ \"labels\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"labels\" ], list ) and ( len( attributes[ \"labels\" ] ) == 0 or isinstance( attributes[ \"labels\" ][ 0 ], dict ) )\n self.__labels = [\n Label.Label( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"labels\" ]\n ]\n- if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None:\n+ if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"milestone\" ], dict )\n self.__milestone = Milestone.Milestone( self.__requester, attributes[ \"milestone\" ], completion = LazyCompletion )\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None:\n+ if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None: # pragma no branch\n self.__pull_request = attributes[ \"pull_request\" ]\n- if \"repository\" in attributes and attributes[ \"repository\" ] is not None:\n+ if \"repository\" in attributes and attributes[ \"repository\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repository\" ], dict )\n self.__repository = Repository.Repository( self.__requester, attributes[ \"repository\" ], completion = LazyCompletion )\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], str )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], str )\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"5ed8d8d10b46e6427503e050fdfad6ba22837e25","filename":"src/github/IssueComment.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/IssueComment.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"a276fe9eaea713a8599710636ead83d77023b99f","filename":"src/github/IssueEvent.py","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/IssueEvent.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -78,24 +78,24 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"commit_id\", \"created_at\", \"event\", \"id\", \"issue\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], str )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"event\" in attributes and attributes[ \"event\" ] is not None:\n+ if \"event\" in attributes and attributes[ \"event\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"event\" ], str )\n self.__event = attributes[ \"event\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"issue\" in attributes and attributes[ \"issue\" ] is not None:\n+ if \"issue\" in attributes and attributes[ \"issue\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"issue\" ], dict )\n self.__issue = Issue.Issue( self.__requester, attributes[ \"issue\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"1f11c4d96625bb675a5c9ce84c813caf4745ff67","filename":"src/github/Label.py","status":"modified","additions":10,"deletions":3,"changes":13,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Label.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -1,6 +1,8 @@\n # WARNING: this file is generated automaticaly.\n # Do not modify it manually, your work would be lost.\n \n+import urllib\n+\n import PaginatedList\n from GithubObject import *\n \n@@ -43,6 +45,11 @@ def edit( self, name, color ):\n )\n self.__useAttributes( data )\n \n+ # @todo Remove '_identity' from the normalized json description\n+ @property\n+ def _identity( self ):\n+ return urllib.quote( self.name )\n+\n def __initAttributes( self ):\n self.__color = None\n self.__name = None\n@@ -53,9 +60,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"color\", \"name\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"color\" in attributes and attributes[ \"color\" ] is not None:\n+ if \"color\" in attributes and attributes[ \"color\" ] is not None: # pragma no branch\n self.__color = attributes[ \"color\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"ffbb51b8941c5bdd34bbc539825666e1155b0699","filename":"src/github/Milestone.py","status":"modified","additions":11,"deletions":11,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Milestone.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -114,36 +114,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"closed_issues\", \"created_at\", \"creator\", \"description\", \"due_on\", \"id\", \"number\", \"open_issues\", \"state\", \"title\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None:\n+ if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_issues\" ], int )\n self.__closed_issues = attributes[ \"closed_issues\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"creator\" in attributes and attributes[ \"creator\" ] is not None:\n+ if \"creator\" in attributes and attributes[ \"creator\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"creator\" ], dict )\n self.__creator = NamedUser.NamedUser( self.__requester, attributes[ \"creator\" ], completion = LazyCompletion )\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], str )\n self.__description = attributes[ \"description\" ]\n- if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None:\n+ if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"due_on\" ], str )\n self.__due_on = attributes[ \"due_on\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], str )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], str )\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"61400ed17d9985d2de72dbf8b489de903dbe494e","filename":"src/github/NamedUser.py","status":"modified","additions":26,"deletions":26,"changes":52,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/NamedUser.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -365,81 +365,81 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"contributions\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], str )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], str )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], str )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], str )\n self.__company = attributes[ \"company\" ]\n- if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None:\n+ if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"contributions\" ], int )\n self.__contributions = attributes[ \"contributions\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], str )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], str )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], str )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"78ac913ccb12dc01a5064095456078444925ae9e","filename":"src/github/Organization.py","status":"modified","additions":24,"deletions":24,"changes":48,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Organization.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -390,75 +390,75 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"billing_email\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], str )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None:\n+ if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"billing_email\" ], str )\n self.__billing_email = attributes[ \"billing_email\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], str )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], str )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], str )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], str )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], str )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]"},{"sha":"043f6f5db4d094d723aafbec7fe54a77205e9f0f","filename":"src/github/Permissions.py","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Permissions.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"admin\", \"pull\", \"push\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"admin\" in attributes and attributes[ \"admin\" ] is not None:\n+ if \"admin\" in attributes and attributes[ \"admin\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"admin\" ], bool )\n self.__admin = attributes[ \"admin\" ]\n- if \"pull\" in attributes and attributes[ \"pull\" ] is not None:\n+ if \"pull\" in attributes and attributes[ \"pull\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pull\" ], bool )\n self.__pull = attributes[ \"pull\" ]\n- if \"push\" in attributes and attributes[ \"push\" ] is not None:\n+ if \"push\" in attributes and attributes[ \"push\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"push\" ], bool )\n self.__push = attributes[ \"push\" ]"},{"sha":"14ac71bd4920084cd9c8dd2e452c707d82807a64","filename":"src/github/Plan.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Plan.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -37,15 +37,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"collaborators\", \"name\", \"private_repos\", \"space\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None:\n+ if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_repos\" ], int )\n self.__private_repos = attributes[ \"private_repos\" ]\n- if \"space\" in attributes and attributes[ \"space\" ] is not None:\n+ if \"space\" in attributes and attributes[ \"space\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"space\" ], int )\n self.__space = attributes[ \"space\" ]"},{"sha":"07e945e4b49ca0d8cb8e06c124431022765bc8f0","filename":"src/github/PullRequest.py","status":"modified","additions":26,"deletions":26,"changes":52,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/PullRequest.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -279,56 +279,56 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"base\", \"body\", \"changed_files\", \"closed_at\", \"comments\", \"commits\", \"created_at\", \"deletions\", \"diff_url\", \"head\", \"html_url\", \"id\", \"issue_url\", \"mergeable\", \"merged\", \"merged_at\", \"merged_by\", \"number\", \"patch_url\", \"review_comments\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"base\" in attributes and attributes[ \"base\" ] is not None:\n+ if \"base\" in attributes and attributes[ \"base\" ] is not None: # pragma no branch\n self.__base = attributes[ \"base\" ]\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None:\n+ if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None: # pragma no branch\n self.__changed_files = attributes[ \"changed_files\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n self.__comments = attributes[ \"comments\" ]\n- if \"commits\" in attributes and attributes[ \"commits\" ] is not None:\n+ if \"commits\" in attributes and attributes[ \"commits\" ] is not None: # pragma no branch\n self.__commits = attributes[ \"commits\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None:\n+ if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None: # pragma no branch\n self.__diff_url = attributes[ \"diff_url\" ]\n- if \"head\" in attributes and attributes[ \"head\" ] is not None:\n+ if \"head\" in attributes and attributes[ \"head\" ] is not None: # pragma no branch\n self.__head = attributes[ \"head\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None:\n+ if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None: # pragma no branch\n self.__issue_url = attributes[ \"issue_url\" ]\n- if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None:\n+ if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None: # pragma no branch\n self.__mergeable = attributes[ \"mergeable\" ]\n- if \"merged\" in attributes and attributes[ \"merged\" ] is not None:\n+ if \"merged\" in attributes and attributes[ \"merged\" ] is not None: # pragma no branch\n self.__merged = attributes[ \"merged\" ]\n- if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None:\n+ if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None: # pragma no branch\n self.__merged_at = attributes[ \"merged_at\" ]\n- if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None:\n+ if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None: # pragma no branch\n self.__merged_by = attributes[ \"merged_by\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n self.__number = attributes[ \"number\" ]\n- if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None:\n+ if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None: # pragma no branch\n self.__patch_url = attributes[ \"patch_url\" ]\n- if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None:\n+ if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None: # pragma no branch\n self.__review_comments = attributes[ \"review_comments\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"d0095192e606f65fec81882be15aca06ac47e5e3","filename":"src/github/PullRequestComment.py","status":"modified","additions":11,"deletions":11,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/PullRequestComment.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -121,26 +121,26 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )"},{"sha":"043fb9a5328ad003b449573616e418f17e25bac2","filename":"src/github/PullRequestFile.py","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/PullRequestFile.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]"},{"sha":"30b4bc70dc2a72c52c1cf02e63a26e1cfaf5676e","filename":"src/github/Repository.py","status":"modified","additions":31,"deletions":31,"changes":62,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Repository.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -905,96 +905,96 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"clone_url\", \"created_at\", \"description\", \"fork\", \"forks\", \"full_name\", \"git_url\", \"has_downloads\", \"has_issues\", \"has_wiki\", \"homepage\", \"html_url\", \"id\", \"language\", \"master_branch\", \"mirror_url\", \"name\", \"open_issues\", \"organization\", \"owner\", \"parent\", \"permissions\", \"private\", \"pushed_at\", \"size\", \"source\", \"ssh_url\", \"svn_url\", \"updated_at\", \"url\", \"watchers\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None:\n+ if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"clone_url\" ], str )\n self.__clone_url = attributes[ \"clone_url\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], str )\n self.__description = attributes[ \"description\" ]\n- if \"fork\" in attributes and attributes[ \"fork\" ] is not None:\n+ if \"fork\" in attributes and attributes[ \"fork\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork\" ], bool )\n self.__fork = attributes[ \"fork\" ]\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], int )\n self.__forks = attributes[ \"forks\" ]\n- if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None:\n+ if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"full_name\" ], str )\n self.__full_name = attributes[ \"full_name\" ]\n- if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None:\n+ if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_url\" ], str )\n self.__git_url = attributes[ \"git_url\" ]\n- if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None:\n+ if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_downloads\" ], bool )\n self.__has_downloads = attributes[ \"has_downloads\" ]\n- if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None:\n+ if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_issues\" ], bool )\n self.__has_issues = attributes[ \"has_issues\" ]\n- if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None:\n+ if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_wiki\" ], bool )\n self.__has_wiki = attributes[ \"has_wiki\" ]\n- if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None:\n+ if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"homepage\" ], str )\n self.__homepage = attributes[ \"homepage\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"language\" in attributes and attributes[ \"language\" ] is not None:\n+ if \"language\" in attributes and attributes[ \"language\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"language\" ], str )\n self.__language = attributes[ \"language\" ]\n- if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None:\n+ if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"master_branch\" ], str )\n self.__master_branch = attributes[ \"master_branch\" ]\n- if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None:\n+ if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mirror_url\" ], str )\n self.__mirror_url = attributes[ \"mirror_url\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"organization\" in attributes and attributes[ \"organization\" ] is not None:\n+ if \"organization\" in attributes and attributes[ \"organization\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"organization\" ], dict )\n self.__organization = Organization.Organization( self.__requester, attributes[ \"organization\" ], completion = LazyCompletion )\n- if \"owner\" in attributes and attributes[ \"owner\" ] is not None:\n+ if \"owner\" in attributes and attributes[ \"owner\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owner\" ], dict )\n self.__owner = NamedUser.NamedUser( self.__requester, attributes[ \"owner\" ], completion = LazyCompletion )\n- if \"parent\" in attributes and attributes[ \"parent\" ] is not None:\n+ if \"parent\" in attributes and attributes[ \"parent\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parent\" ], dict )\n self.__parent = Repository( self.__requester, attributes[ \"parent\" ], completion = LazyCompletion )\n- if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None:\n+ if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"permissions\" ], dict )\n self.__permissions = Permissions.Permissions( self.__requester, attributes[ \"permissions\" ], completion = LazyCompletion )\n- if \"private\" in attributes and attributes[ \"private\" ] is not None:\n+ if \"private\" in attributes and attributes[ \"private\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private\" ], bool )\n self.__private = attributes[ \"private\" ]\n- if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None:\n+ if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pushed_at\" ], str )\n self.__pushed_at = attributes[ \"pushed_at\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"source\" in attributes and attributes[ \"source\" ] is not None:\n+ if \"source\" in attributes and attributes[ \"source\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"source\" ], dict )\n self.__source = Repository( self.__requester, attributes[ \"source\" ], completion = LazyCompletion )\n- if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None:\n+ if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ssh_url\" ], str )\n self.__ssh_url = attributes[ \"ssh_url\" ]\n- if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None:\n+ if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"svn_url\" ], str )\n self.__svn_url = attributes[ \"svn_url\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None:\n+ if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"watchers\" ], int )\n self.__watchers = attributes[ \"watchers\" ]"},{"sha":"fc5cafc09e2b8120e47c2bbdf0e0fa0821ec5ecf","filename":"src/github/RepositoryKey.py","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/RepositoryKey.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]"},{"sha":"7903406c469352d3f3fb897ed9ac9fc9ebc51c3b","filename":"src/github/Tag.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Tag.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -38,15 +38,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", \"tarball_url\", \"zipball_url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None:\n+ if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tarball_url\" ], str )\n self.__tarball_url = attributes[ \"tarball_url\" ]\n- if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None:\n+ if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"zipball_url\" ], str )\n self.__zipball_url = attributes[ \"zipball_url\" ]"},{"sha":"ca5b7e13476a30fee9234c6f965019f303e3f33e","filename":"src/github/Team.py","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/Team.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -172,15 +172,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"members_count\", \"name\", \"permission\", \"repos_count\", \"url\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None:\n+ if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None: # pragma no branch\n self.__members_count = attributes[ \"members_count\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"permission\" in attributes and attributes[ \"permission\" ] is not None:\n+ if \"permission\" in attributes and attributes[ \"permission\" ] is not None: # pragma no branch\n self.__permission = attributes[ \"permission\" ]\n- if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None:\n+ if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None: # pragma no branch\n self.__repos_count = attributes[ \"repos_count\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]"},{"sha":"b7b135d5cf476ece019ca1d018fdf3fc48a450ee","filename":"src/github/UserKey.py","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/src/github/UserKey.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @todo No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]"},{"sha":"c0a781c0bffba244aa2e9826770ccc127f1415af","filename":"test/Issue.py","status":"modified","additions":25,"deletions":1,"changes":26,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/Issue.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -3,7 +3,8 @@\n class Issue( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.issue = self.g.get_user().get_repo( \"PyGithub\" ).get_issue( 28 )\r\n+ self.repo = self.g.get_user().get_repo( \"PyGithub\" )\r\n+ self.issue = self.repo.get_issue( 28 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.issue.assignee.login, \"jacquev6\" )\r\n@@ -47,3 +48,26 @@ def testGetComments( self ):\n \r\n def testGetEvents( self ):\r\n self.assertListKeyEqual( self.issue.get_events(), lambda e: e.id, [ 15819975, 15820048 ] )\r\n+\r\n+ def testGetLabels( self ):\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testAddAndRemoveLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( bug )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\" ] )\r\n+ self.issue.add_to_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testDeleteAndSetLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.delete_labels()\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [] )\r\n+ self.issue.set_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Question\" ] )\r"},{"sha":"77fa51481ceb340a91f3988b7d570d697065ebe8","filename":"test/IssueEvent.py","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/IssueEvent.py?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -3,13 +3,13 @@\n class IssueEvent( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 15819975 )\r\n+ self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 16348656 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.event.actor.login, \"jacquev6\" )\r\n- self.assertEqual( self.event.commit_id, None )\r\n- self.assertEqual( self.event.created_at, \"2012-05-19T10:38:23Z\" )\r\n- self.assertEqual( self.event.event, \"subscribed\" )\r\n- self.assertEqual( self.event.id, 15819975 )\r\n- self.assertEqual( self.event.issue.number, 28 )\r\n- self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\" )\r\n+ self.assertEqual( self.event.commit_id, \"ed866fc43833802ab553e5ff8581c81bb00dd433\" )\r\n+ self.assertEqual( self.event.created_at, \"2012-05-27T07:29:25Z\" )\r\n+ self.assertEqual( self.event.event, \"referenced\" )\r\n+ self.assertEqual( self.event.id, 16348656 )\r\n+ self.assertEqual( self.event.issue.number, 30 )\r\n+ self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\" )\r"},{"sha":"fb933714353269eb17e70880daacaf9166d4f742","filename":"test/ReplayData/Issue.testAddAndRemoveLabels.txt","status":"added","additions":45,"deletions":0,"changes":45,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/ReplayData/Issue.testAddAndRemoveLabels.txt?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -0,0 +1,45 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4992'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"569c414d87e8ec43ec269a9e28bc2982\"'), ('date', 'Sun, 27 May 2012 09:04:01 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4991'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"b659c8dcc1212c71f826547c3cc7ae99\"'), ('date', 'Sun, 27 May 2012 09:04:02 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4990'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4989'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4986'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:05 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+POST /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4984'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+"},{"sha":"bbd6ae4ea3dac63b301017dece6f56b34eab6f80","filename":"test/ReplayData/Issue.testDeleteAndSetLabels.txt","status":"added","additions":35,"deletions":0,"changes":35,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/ReplayData/Issue.testDeleteAndSetLabels.txt?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -0,0 +1,35 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4974'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fe2e942523eecb156d100829a6347516\"'), ('date', 'Sun, 27 May 2012 09:06:37 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4973'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"931e58d337b2290717303141eda89cd7\"'), ('date', 'Sun, 27 May 2012 09:06:38 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4972'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+204\n+[('status', '204 No Content'), ('x-ratelimit-remaining', '4971'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d41d8cd98f00b204e9800998ecf8427e\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT')]\n+\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4970'), ('content-length', '2'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d751713988987e9331980363e24189ce\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[]\n+\n+PUT /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4969'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4968'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:41 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+"},{"sha":"282dda36da4958e743c70a1cee5b89df0afce592","filename":"test/ReplayData/Issue.testGetLabels.txt","status":"added","additions":5,"deletions":0,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/ReplayData/Issue.testGetLabels.txt?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -0,0 +1,5 @@\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 08:56:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+"},{"sha":"0de7e5358c98a51af4f18e7ff9559f4a826bfebc","filename":"test/ReplayData/IssueEvent.setUp.txt","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/test/ReplayData/IssueEvent.setUp.txt?ref=8a4f306d4b223682dd19410d4a9150636ebe4206","patch":"@@ -1,15 +1,15 @@\n GET /user {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4907'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"99c9bfb75395b749e9913a4729126fb5\"'), ('date', 'Sun, 27 May 2012 07:19:30 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"private_gists\":5,\"type\":\"User\",\"company\":\"Criteo\",\"location\":\"Paris, France\",\"hireable\":false,\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"bio\":\"\",\"following\":24,\"blog\":\"http://vincent-jacques.net\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"total_private_repos\":5,\"followers\":13,\"owned_private_repos\":5,\"disk_usage\":16976,\"collaborators\":0,\"html_url\":\"https://github.com/jacquev6\",\"url\":\"https://api.github.com/users/jacquev6\",\"name\":\"Vincent Jacques\",\"login\":\"jacquev6\",\"public_repos\":11,\"public_gists\":3,\"email\":\"vincent@vincent-jacques.net\",\"id\":327146,\"plan\":{\"private_repos\":5,\"collaborators\":1,\"name\":\"micro\",\"space\":614400},\"created_at\":\"2010-07-09T06:10:06Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"8974bb1628a3e3a6d3eb3b08c1b5a46b\"'), ('date', 'Sun, 27 May 2012 07:32:54 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"type\":\"User\",\"bio\":\"\",\"disk_usage\":16976,\"total_private_repos\":5,\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"owned_private_repos\":5,\"collaborators\":0,\"plan\":{\"collaborators\":1,\"private_repos\":5,\"name\":\"micro\",\"space\":614400},\"company\":\"Criteo\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"email\":\"vincent@vincent-jacques.net\",\"public_gists\":3,\"followers\":13,\"name\":\"Vincent Jacques\",\"created_at\":\"2010-07-09T06:10:06Z\",\"blog\":\"http://vincent-jacques.net\",\"location\":\"Paris, France\",\"hireable\":false,\"id\":327146,\"private_gists\":5,\"public_repos\":11,\"following\":24,\"html_url\":\"https://github.com/jacquev6\"}\n \n GET /repos/jacquev6/PyGithub {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4906'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"4c20acf0b23f75bbf25106b1a04f65a5\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"description\":\"Python library implementing the full Github API v3\",\"full_name\":\"jacquev6/PyGithub\",\"has_wiki\":false,\"has_issues\":true,\"updated_at\":\"2012-05-27T06:55:28Z\",\"forks\":3,\"mirror_url\":null,\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"open_issues\":16,\"fork\":false,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"size\":308,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"private\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"owner\":{\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"url\":\"https://api.github.com/users/jacquev6\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"has_downloads\":true,\"language\":\"Python\",\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"id\":3544490,\"permissions\":{\"admin\":true,\"pull\":true,\"push\":true},\"created_at\":\"2012-02-25T12:53:47Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4995'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"f1e4eb3993a364b66b68ec9db42405bd\"'), ('date', 'Sun, 27 May 2012 07:32:55 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"updated_at\":\"2012-05-27T07:29:24Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T07:29:24Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\n \n-GET /repos/jacquev6/PyGithub/issues/events/15819975 {'Authorization': 'Basic login_and_password_removed'} null\n+GET /repos/jacquev6/PyGithub/issues/events/16348656 {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4905'), ('content-length', '2430'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"a3d244842d23f92f69a23e21626fad11\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\",\"issue\":{\"updated_at\":\"2012-05-26T14:59:33Z\",\"body\":\"Body edited by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/28\",\"comments\":0,\"milestone\":{\"creator\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones/1\",\"number\":1,\"title\":\"Version 0.4\",\"due_on\":\"2012-03-13T07:00:00Z\",\"closed_issues\":3,\"open_issues\":0,\"created_at\":\"2012-03-08T12:22:10Z\",\"state\":\"closed\",\"description\":\"\",\"id\":93546},\"number\":28,\"assignee\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"closed_at\":\"2012-05-26T14:59:33Z\",\"title\":\"Issue created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-19T10:38:23Z\",\"state\":\"closed\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"id\":4653757,\"pull_request\":{\"diff_url\":null,\"patch_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/28\"},\"commit_id\":null,\"created_at\":\"2012-05-19T10:38:23Z\",\"event\":\"subscribed\",\"id\":15819975,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146}}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('content-length', '1384'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fefecab09e7355d4ef9875677c2631da\"'), ('date', 'Sun, 27 May 2012 07:32:56 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\",\"issue\":{\"updated_at\":\"2012-05-27T07:27:51Z\",\"body\":\"Body created by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/30\",\"comments\":0,\"milestone\":null,\"number\":30,\"assignee\":null,\"closed_at\":null,\"title\":\"Issue also created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-27T05:40:15Z\",\"state\":\"open\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"},\"id\":4769659,\"pull_request\":{\"patch_url\":null,\"diff_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/30\"},\"commit_id\":\"ed866fc43833802ab553e5ff8581c81bb00dd433\",\"created_at\":\"2012-05-27T07:29:25Z\",\"event\":\"referenced\",\"id\":16348656,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"}}\n "}] https GET @@ -304,7 +304,7 @@ None None 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4870'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('x-github-request-id', 'b385a4bc-89bd-418f-b2ee-948a4ed67670'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '711256'), ('server', 'GitHub.com'), ('last-modified', 'Fri, 06 Sep 2013 09:04:41 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '"ff2ab76c56b865233dfb98f5804276b6"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Fri, 06 Sep 2013 15:05:51 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1378482241')] -{"url":"https://api.github.com/repos/jacquev6/PyGithub/compare/master...develop","html_url":"https://github.com/jacquev6/PyGithub/compare/master...develop","permalink_url":"https://github.com/jacquev6/PyGithub/compare/jacquev6:ed781f8...jacquev6:a659749","diff_url":"https://github.com/jacquev6/PyGithub/compare/master...develop.diff","patch_url":"https://github.com/jacquev6/PyGithub/compare/master...develop.patch","base_commit":{"sha":"ed781f8b1b96e1d2a342d36ca53114ea28862fa8","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:39:22Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:39:22Z"},"message":"Fix date of 1.18.0","tree":{"sha":"e90c43164378222f04883c0f6547102df818d1ef","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e90c43164378222f04883c0f6547102df818d1ef"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","html_url":"https://github.com/jacquev6/PyGithub/commit/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2c4e3cbc24581c214f44682bfc3e7f438bae127a","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2c4e3cbc24581c214f44682bfc3e7f438bae127a","html_url":"https://github.com/jacquev6/PyGithub/commit/2c4e3cbc24581c214f44682bfc3e7f438bae127a"}]},"merge_base_commit":{"sha":"ed781f8b1b96e1d2a342d36ca53114ea28862fa8","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:39:22Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:39:22Z"},"message":"Fix date of 1.18.0","tree":{"sha":"e90c43164378222f04883c0f6547102df818d1ef","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e90c43164378222f04883c0f6547102df818d1ef"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","html_url":"https://github.com/jacquev6/PyGithub/commit/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2c4e3cbc24581c214f44682bfc3e7f438bae127a","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2c4e3cbc24581c214f44682bfc3e7f438bae127a","html_url":"https://github.com/jacquev6/PyGithub/commit/2c4e3cbc24581c214f44682bfc3e7f438bae127a"}]},"status":"ahead","ahead_by":99,"behind_by":0,"total_commits":99,"commits":[{"sha":"ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T00:27:42Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T00:27:42Z"},"message":"Update .gitignore to ignore eproject settings and custom build batch files","tree":{"sha":"b4bf5289c36eb4f50999895cf7f1d0c8ddd26448","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/b4bf5289c36eb4f50999895cf7f1d0c8ddd26448"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","html_url":"https://github.com/jacquev6/PyGithub/commit/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0a1e1fa488a7cf43016fe9ec30e5cc54dfcc7bfd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0a1e1fa488a7cf43016fe9ec30e5cc54dfcc7bfd","html_url":"https://github.com/jacquev6/PyGithub/commit/0a1e1fa488a7cf43016fe9ec30e5cc54dfcc7bfd"}]},{"sha":"cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T03:21:15Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T03:21:15Z"},"message":"Change GithubObject.__init__ without breaking build.","tree":{"sha":"30c8a26c9dd4a5c68c8b15666f126f9ef3929d8f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/30c8a26c9dd4a5c68c8b15666f126f9ef3929d8f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","html_url":"https://github.com/jacquev6/PyGithub/commit/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","html_url":"https://github.com/jacquev6/PyGithub/commit/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03"}]},{"sha":"0bc138b490b0b9d7ebc5e539547b88e062dd127d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T04:32:41Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T04:32:41Z"},"message":"Change NonCompletableGithubObject without breaking build.","tree":{"sha":"05c4e4c51ed7f77adf8f96b1ef6262bd004822db","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/05c4e4c51ed7f77adf8f96b1ef6262bd004822db"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0bc138b490b0b9d7ebc5e539547b88e062dd127d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0bc138b490b0b9d7ebc5e539547b88e062dd127d","html_url":"https://github.com/jacquev6/PyGithub/commit/0bc138b490b0b9d7ebc5e539547b88e062dd127d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0bc138b490b0b9d7ebc5e539547b88e062dd127d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","html_url":"https://github.com/jacquev6/PyGithub/commit/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f"}]},{"sha":"b12c4b38c55ad9649541668950a01e6b3940a1bc","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:05:41Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:05:41Z"},"message":"Update Tag.py","tree":{"sha":"61648b068707a2dd5d7cc00832acc5eb76be102e","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/61648b068707a2dd5d7cc00832acc5eb76be102e"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/b12c4b38c55ad9649541668950a01e6b3940a1bc","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b12c4b38c55ad9649541668950a01e6b3940a1bc","html_url":"https://github.com/jacquev6/PyGithub/commit/b12c4b38c55ad9649541668950a01e6b3940a1bc","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b12c4b38c55ad9649541668950a01e6b3940a1bc/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0bc138b490b0b9d7ebc5e539547b88e062dd127d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0bc138b490b0b9d7ebc5e539547b88e062dd127d","html_url":"https://github.com/jacquev6/PyGithub/commit/0bc138b490b0b9d7ebc5e539547b88e062dd127d"}]},{"sha":"9f6562cb625d30b08b053da44a059ace70ed366e","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:07:23Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:07:23Z"},"message":"Update CommitStatus.py","tree":{"sha":"9d219ca7890099f4b9865927af6d8444557d5dd9","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9d219ca7890099f4b9865927af6d8444557d5dd9"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/9f6562cb625d30b08b053da44a059ace70ed366e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/9f6562cb625d30b08b053da44a059ace70ed366e","html_url":"https://github.com/jacquev6/PyGithub/commit/9f6562cb625d30b08b053da44a059ace70ed366e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/9f6562cb625d30b08b053da44a059ace70ed366e/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"b12c4b38c55ad9649541668950a01e6b3940a1bc","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b12c4b38c55ad9649541668950a01e6b3940a1bc","html_url":"https://github.com/jacquev6/PyGithub/commit/b12c4b38c55ad9649541668950a01e6b3940a1bc"}]},{"sha":"e8e8d174fb65249dd6aa41d3ec7993223dc83af4","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:08:48Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:08:48Z"},"message":"Update Event.py","tree":{"sha":"965865c144a91581cd5560a6853ac7d244e8621d","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/965865c144a91581cd5560a6853ac7d244e8621d"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e8e8d174fb65249dd6aa41d3ec7993223dc83af4","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e8e8d174fb65249dd6aa41d3ec7993223dc83af4","html_url":"https://github.com/jacquev6/PyGithub/commit/e8e8d174fb65249dd6aa41d3ec7993223dc83af4","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e8e8d174fb65249dd6aa41d3ec7993223dc83af4/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"9f6562cb625d30b08b053da44a059ace70ed366e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/9f6562cb625d30b08b053da44a059ace70ed366e","html_url":"https://github.com/jacquev6/PyGithub/commit/9f6562cb625d30b08b053da44a059ace70ed366e"}]},{"sha":"6943f6da7f84b05b8eae4555dbc598df2fe5ec01","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:10:32Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:10:32Z"},"message":"Update Branch.py","tree":{"sha":"69f9bb6bfbaa5a78bf94976b71fb778f6e105c17","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/69f9bb6bfbaa5a78bf94976b71fb778f6e105c17"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6943f6da7f84b05b8eae4555dbc598df2fe5ec01","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6943f6da7f84b05b8eae4555dbc598df2fe5ec01","html_url":"https://github.com/jacquev6/PyGithub/commit/6943f6da7f84b05b8eae4555dbc598df2fe5ec01","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6943f6da7f84b05b8eae4555dbc598df2fe5ec01/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"e8e8d174fb65249dd6aa41d3ec7993223dc83af4","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e8e8d174fb65249dd6aa41d3ec7993223dc83af4","html_url":"https://github.com/jacquev6/PyGithub/commit/e8e8d174fb65249dd6aa41d3ec7993223dc83af4"}]},{"sha":"bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:15:25Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:15:25Z"},"message":"Update File.py","tree":{"sha":"1435b24b2da7c0403801e09ea0e9bf9cc1660eac","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/1435b24b2da7c0403801e09ea0e9bf9cc1660eac"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","html_url":"https://github.com/jacquev6/PyGithub/commit/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"6943f6da7f84b05b8eae4555dbc598df2fe5ec01","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6943f6da7f84b05b8eae4555dbc598df2fe5ec01","html_url":"https://github.com/jacquev6/PyGithub/commit/6943f6da7f84b05b8eae4555dbc598df2fe5ec01"}]},{"sha":"c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:18:29Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:18:29Z"},"message":"Update Gist.py","tree":{"sha":"002b4962bc4386c46823d1f2f36c7fad4e8aa2b4","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/002b4962bc4386c46823d1f2f36c7fad4e8aa2b4"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","html_url":"https://github.com/jacquev6/PyGithub/commit/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","html_url":"https://github.com/jacquev6/PyGithub/commit/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd"}]},{"sha":"4f1e05200d35e951fb52730c3d783c2942836695","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:21:49Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:21:49Z"},"message":"Update GitAuthor.py","tree":{"sha":"c5ad338858b03d34b38b1ca8a8ea8578d5a64da5","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/c5ad338858b03d34b38b1ca8a8ea8578d5a64da5"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/4f1e05200d35e951fb52730c3d783c2942836695","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4f1e05200d35e951fb52730c3d783c2942836695","html_url":"https://github.com/jacquev6/PyGithub/commit/4f1e05200d35e951fb52730c3d783c2942836695","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4f1e05200d35e951fb52730c3d783c2942836695/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","html_url":"https://github.com/jacquev6/PyGithub/commit/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a"}]},{"sha":"0879cbb6ff5f349bc8f867dace06801cf8f04136","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:23:21Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:23:21Z"},"message":"Update GitignoreTemplate.py","tree":{"sha":"eac0b02fc4be8c34681d548624dec5d93b0875e4","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/eac0b02fc4be8c34681d548624dec5d93b0875e4"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0879cbb6ff5f349bc8f867dace06801cf8f04136","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0879cbb6ff5f349bc8f867dace06801cf8f04136","html_url":"https://github.com/jacquev6/PyGithub/commit/0879cbb6ff5f349bc8f867dace06801cf8f04136","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0879cbb6ff5f349bc8f867dace06801cf8f04136/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"4f1e05200d35e951fb52730c3d783c2942836695","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4f1e05200d35e951fb52730c3d783c2942836695","html_url":"https://github.com/jacquev6/PyGithub/commit/4f1e05200d35e951fb52730c3d783c2942836695"}]},{"sha":"274ab70f874098d1a0385e636748f0651b739e62","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:26:08Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:26:08Z"},"message":"Update GitObject.py","tree":{"sha":"596c0e549efc2279f7343db4d1abee3eb70955c7","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/596c0e549efc2279f7343db4d1abee3eb70955c7"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/274ab70f874098d1a0385e636748f0651b739e62","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/274ab70f874098d1a0385e636748f0651b739e62","html_url":"https://github.com/jacquev6/PyGithub/commit/274ab70f874098d1a0385e636748f0651b739e62","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/274ab70f874098d1a0385e636748f0651b739e62/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0879cbb6ff5f349bc8f867dace06801cf8f04136","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0879cbb6ff5f349bc8f867dace06801cf8f04136","html_url":"https://github.com/jacquev6/PyGithub/commit/0879cbb6ff5f349bc8f867dace06801cf8f04136"}]},{"sha":"02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:30:39Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:30:39Z"},"message":"Update GitTree.py","tree":{"sha":"245148f865501a2ad0614136baef4ea6c2341992","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/245148f865501a2ad0614136baef4ea6c2341992"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","html_url":"https://github.com/jacquev6/PyGithub/commit/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"274ab70f874098d1a0385e636748f0651b739e62","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/274ab70f874098d1a0385e636748f0651b739e62","html_url":"https://github.com/jacquev6/PyGithub/commit/274ab70f874098d1a0385e636748f0651b739e62"}]},{"sha":"ac1585ee13f13cfa20fd79a78c4643de815607fd","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:59:08Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:59:08Z"},"message":"Update HookDescription.py.","tree":{"sha":"6509b30ec9b0ff54edde6277bf408585b68e464b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6509b30ec9b0ff54edde6277bf408585b68e464b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ac1585ee13f13cfa20fd79a78c4643de815607fd","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ac1585ee13f13cfa20fd79a78c4643de815607fd","html_url":"https://github.com/jacquev6/PyGithub/commit/ac1585ee13f13cfa20fd79a78c4643de815607fd","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ac1585ee13f13cfa20fd79a78c4643de815607fd/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","html_url":"https://github.com/jacquev6/PyGithub/commit/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290"}]},{"sha":"d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:03:57Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:03:57Z"},"message":"Update IssuePullRequest.py","tree":{"sha":"a5ea8a1ed6a03152d916d4c066ee2394ed4a4f97","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a5ea8a1ed6a03152d916d4c066ee2394ed4a4f97"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","html_url":"https://github.com/jacquev6/PyGithub/commit/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ac1585ee13f13cfa20fd79a78c4643de815607fd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ac1585ee13f13cfa20fd79a78c4643de815607fd","html_url":"https://github.com/jacquev6/PyGithub/commit/ac1585ee13f13cfa20fd79a78c4643de815607fd"}]},{"sha":"12387505e2fbf25ceae63f169b13d57d86b80282","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:05:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:05:10Z"},"message":"Update Notification.py","tree":{"sha":"2a05533d50e9e0b9173fa9030bad2259f9a8d24b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/2a05533d50e9e0b9173fa9030bad2259f9a8d24b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/12387505e2fbf25ceae63f169b13d57d86b80282","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/12387505e2fbf25ceae63f169b13d57d86b80282","html_url":"https://github.com/jacquev6/PyGithub/commit/12387505e2fbf25ceae63f169b13d57d86b80282","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/12387505e2fbf25ceae63f169b13d57d86b80282/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","html_url":"https://github.com/jacquev6/PyGithub/commit/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d"}]},{"sha":"6e11aa9cf041be25691971476bc474facb1bd1f1","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:07:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:07:10Z"},"message":"Update Permissions.py","tree":{"sha":"1653ca5e502dacc579e8489c1ff967970e95a68f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/1653ca5e502dacc579e8489c1ff967970e95a68f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6e11aa9cf041be25691971476bc474facb1bd1f1","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6e11aa9cf041be25691971476bc474facb1bd1f1","html_url":"https://github.com/jacquev6/PyGithub/commit/6e11aa9cf041be25691971476bc474facb1bd1f1","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6e11aa9cf041be25691971476bc474facb1bd1f1/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"12387505e2fbf25ceae63f169b13d57d86b80282","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/12387505e2fbf25ceae63f169b13d57d86b80282","html_url":"https://github.com/jacquev6/PyGithub/commit/12387505e2fbf25ceae63f169b13d57d86b80282"}]},{"sha":"dcb6874745b2e0466017f94be745ba35b72a3748","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:09:11Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:09:11Z"},"message":"Fix CommitStats.py","tree":{"sha":"9191d147b43f13eee33b585441a4573028534a02","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9191d147b43f13eee33b585441a4573028534a02"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/dcb6874745b2e0466017f94be745ba35b72a3748","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dcb6874745b2e0466017f94be745ba35b72a3748","html_url":"https://github.com/jacquev6/PyGithub/commit/dcb6874745b2e0466017f94be745ba35b72a3748","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dcb6874745b2e0466017f94be745ba35b72a3748/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"6e11aa9cf041be25691971476bc474facb1bd1f1","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6e11aa9cf041be25691971476bc474facb1bd1f1","html_url":"https://github.com/jacquev6/PyGithub/commit/6e11aa9cf041be25691971476bc474facb1bd1f1"}]},{"sha":"deb0514b5e7364b307a611797681da8ddf6db5c1","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:10:37Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:10:37Z"},"message":"Update Hook.py","tree":{"sha":"2a46cd5f6c33398d1b347912bcdc596fa0b66d0d","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/2a46cd5f6c33398d1b347912bcdc596fa0b66d0d"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/deb0514b5e7364b307a611797681da8ddf6db5c1","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/deb0514b5e7364b307a611797681da8ddf6db5c1","html_url":"https://github.com/jacquev6/PyGithub/commit/deb0514b5e7364b307a611797681da8ddf6db5c1","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/deb0514b5e7364b307a611797681da8ddf6db5c1/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"dcb6874745b2e0466017f94be745ba35b72a3748","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dcb6874745b2e0466017f94be745ba35b72a3748","html_url":"https://github.com/jacquev6/PyGithub/commit/dcb6874745b2e0466017f94be745ba35b72a3748"}]},{"sha":"c7aeaddfa8897ed9a23764bbb4beda29403ab413","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:13:14Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:13:14Z"},"message":"Fix PullRequestMergeStatus.py","tree":{"sha":"e4f7ae5aa275ca50cbc0e52dcb49ad224355f0af","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e4f7ae5aa275ca50cbc0e52dcb49ad224355f0af"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c7aeaddfa8897ed9a23764bbb4beda29403ab413","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7aeaddfa8897ed9a23764bbb4beda29403ab413","html_url":"https://github.com/jacquev6/PyGithub/commit/c7aeaddfa8897ed9a23764bbb4beda29403ab413","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7aeaddfa8897ed9a23764bbb4beda29403ab413/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"deb0514b5e7364b307a611797681da8ddf6db5c1","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/deb0514b5e7364b307a611797681da8ddf6db5c1","html_url":"https://github.com/jacquev6/PyGithub/commit/deb0514b5e7364b307a611797681da8ddf6db5c1"}]},{"sha":"b2c4519c06cf541ae327d80b0b1361e2698e23ae","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:15:09Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:15:09Z"},"message":"Update PulllRequestPart.py","tree":{"sha":"476f8bc503a98475a13bcf929c9af2034044be23","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/476f8bc503a98475a13bcf929c9af2034044be23"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/b2c4519c06cf541ae327d80b0b1361e2698e23ae","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b2c4519c06cf541ae327d80b0b1361e2698e23ae","html_url":"https://github.com/jacquev6/PyGithub/commit/b2c4519c06cf541ae327d80b0b1361e2698e23ae","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b2c4519c06cf541ae327d80b0b1361e2698e23ae/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c7aeaddfa8897ed9a23764bbb4beda29403ab413","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7aeaddfa8897ed9a23764bbb4beda29403ab413","html_url":"https://github.com/jacquev6/PyGithub/commit/c7aeaddfa8897ed9a23764bbb4beda29403ab413"}]},{"sha":"4a1a1d406896ebd96315fcf9092ab68dfb7a7194","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:19:31Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:19:31Z"},"message":"Update Plan.py","tree":{"sha":"68e82c7745d78fca9ac29501be72a3613f95876a","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/68e82c7745d78fca9ac29501be72a3613f95876a"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/4a1a1d406896ebd96315fcf9092ab68dfb7a7194","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4a1a1d406896ebd96315fcf9092ab68dfb7a7194","html_url":"https://github.com/jacquev6/PyGithub/commit/4a1a1d406896ebd96315fcf9092ab68dfb7a7194","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4a1a1d406896ebd96315fcf9092ab68dfb7a7194/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"b2c4519c06cf541ae327d80b0b1361e2698e23ae","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b2c4519c06cf541ae327d80b0b1361e2698e23ae","html_url":"https://github.com/jacquev6/PyGithub/commit/b2c4519c06cf541ae327d80b0b1361e2698e23ae"}]},{"sha":"a1b65636df9408d93b115a3533a091e3e9cc68c4","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:25:07Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:25:07Z"},"message":"Clean up. NonCompletableGithubObject refactoring resolved.","tree":{"sha":"eec00d808853aee3bf03f8e705fbf49bd32b1dab","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/eec00d808853aee3bf03f8e705fbf49bd32b1dab"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/a1b65636df9408d93b115a3533a091e3e9cc68c4","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a1b65636df9408d93b115a3533a091e3e9cc68c4","html_url":"https://github.com/jacquev6/PyGithub/commit/a1b65636df9408d93b115a3533a091e3e9cc68c4","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a1b65636df9408d93b115a3533a091e3e9cc68c4/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"4a1a1d406896ebd96315fcf9092ab68dfb7a7194","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4a1a1d406896ebd96315fcf9092ab68dfb7a7194","html_url":"https://github.com/jacquev6/PyGithub/commit/4a1a1d406896ebd96315fcf9092ab68dfb7a7194"}]},{"sha":"ca6189c3c94fac963811342ce9f77104d0b5774b","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:49:20Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:49:20Z"},"message":"Change CompletableGithubObject.__init__ without breaking build.","tree":{"sha":"a8fd06251014ac406f89342e2ee118fe5e5e562c","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a8fd06251014ac406f89342e2ee118fe5e5e562c"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ca6189c3c94fac963811342ce9f77104d0b5774b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ca6189c3c94fac963811342ce9f77104d0b5774b","html_url":"https://github.com/jacquev6/PyGithub/commit/ca6189c3c94fac963811342ce9f77104d0b5774b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ca6189c3c94fac963811342ce9f77104d0b5774b/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"a1b65636df9408d93b115a3533a091e3e9cc68c4","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a1b65636df9408d93b115a3533a091e3e9cc68c4","html_url":"https://github.com/jacquev6/PyGithub/commit/a1b65636df9408d93b115a3533a091e3e9cc68c4"}]},{"sha":"2f31828502c95fef62970db7d4ca49fa8b4b8e0d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:04:34Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:04:34Z"},"message":"Update RepositoryKey.py","tree":{"sha":"f1903010376227506f579412a3356276a2ef3a6f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/f1903010376227506f579412a3356276a2ef3a6f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/2f31828502c95fef62970db7d4ca49fa8b4b8e0d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2f31828502c95fef62970db7d4ca49fa8b4b8e0d","html_url":"https://github.com/jacquev6/PyGithub/commit/2f31828502c95fef62970db7d4ca49fa8b4b8e0d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2f31828502c95fef62970db7d4ca49fa8b4b8e0d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ca6189c3c94fac963811342ce9f77104d0b5774b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ca6189c3c94fac963811342ce9f77104d0b5774b","html_url":"https://github.com/jacquev6/PyGithub/commit/ca6189c3c94fac963811342ce9f77104d0b5774b"}]},{"sha":"28a49b94d87408592199ffa018e8c1b3bd9d2a77","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:06:21Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:06:21Z"},"message":"Update AuthenticatedUser.py","tree":{"sha":"be7f3930e35f7752cbf2541d3b9c2ea1b31a4cbb","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/be7f3930e35f7752cbf2541d3b9c2ea1b31a4cbb"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/28a49b94d87408592199ffa018e8c1b3bd9d2a77","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/28a49b94d87408592199ffa018e8c1b3bd9d2a77","html_url":"https://github.com/jacquev6/PyGithub/commit/28a49b94d87408592199ffa018e8c1b3bd9d2a77","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/28a49b94d87408592199ffa018e8c1b3bd9d2a77/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"2f31828502c95fef62970db7d4ca49fa8b4b8e0d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2f31828502c95fef62970db7d4ca49fa8b4b8e0d","html_url":"https://github.com/jacquev6/PyGithub/commit/2f31828502c95fef62970db7d4ca49fa8b4b8e0d"}]},{"sha":"0e19d8e04e847aac690fcd5563c35aa0c1808a80","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:09:34Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:09:34Z"},"message":"Update Authorization.py","tree":{"sha":"fd2c8b34609c810f111d6f911e7bf8af932a3057","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/fd2c8b34609c810f111d6f911e7bf8af932a3057"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0e19d8e04e847aac690fcd5563c35aa0c1808a80","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e19d8e04e847aac690fcd5563c35aa0c1808a80","html_url":"https://github.com/jacquev6/PyGithub/commit/0e19d8e04e847aac690fcd5563c35aa0c1808a80","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e19d8e04e847aac690fcd5563c35aa0c1808a80/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"28a49b94d87408592199ffa018e8c1b3bd9d2a77","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/28a49b94d87408592199ffa018e8c1b3bd9d2a77","html_url":"https://github.com/jacquev6/PyGithub/commit/28a49b94d87408592199ffa018e8c1b3bd9d2a77"}]},{"sha":"83c6495ec557898cd17a70be184c307558b4535c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:10:54Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:10:54Z"},"message":"Update AuthorizationApplication.py","tree":{"sha":"59197288fa8348a8fea3ff62a624c1f423bdc243","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/59197288fa8348a8fea3ff62a624c1f423bdc243"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/83c6495ec557898cd17a70be184c307558b4535c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/83c6495ec557898cd17a70be184c307558b4535c","html_url":"https://github.com/jacquev6/PyGithub/commit/83c6495ec557898cd17a70be184c307558b4535c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/83c6495ec557898cd17a70be184c307558b4535c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0e19d8e04e847aac690fcd5563c35aa0c1808a80","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e19d8e04e847aac690fcd5563c35aa0c1808a80","html_url":"https://github.com/jacquev6/PyGithub/commit/0e19d8e04e847aac690fcd5563c35aa0c1808a80"}]},{"sha":"ed32e78da1303962afaf8fa0d616a1828fdaa80b","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:26:05Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:26:05Z"},"message":"Update Commit.py and GitCommit.py","tree":{"sha":"137ed1870455860097e3fde5ecc1d32d3ae58461","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/137ed1870455860097e3fde5ecc1d32d3ae58461"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ed32e78da1303962afaf8fa0d616a1828fdaa80b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed32e78da1303962afaf8fa0d616a1828fdaa80b","html_url":"https://github.com/jacquev6/PyGithub/commit/ed32e78da1303962afaf8fa0d616a1828fdaa80b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed32e78da1303962afaf8fa0d616a1828fdaa80b/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"83c6495ec557898cd17a70be184c307558b4535c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/83c6495ec557898cd17a70be184c307558b4535c","html_url":"https://github.com/jacquev6/PyGithub/commit/83c6495ec557898cd17a70be184c307558b4535c"}]},{"sha":"3b2e19488fc6a5f51574d874e546173c1835d10b","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:28:00Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:28:00Z"},"message":"Update CommitComment.py","tree":{"sha":"99c70f3baa022e7e837f7903172325a78d41a2a4","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/99c70f3baa022e7e837f7903172325a78d41a2a4"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/3b2e19488fc6a5f51574d874e546173c1835d10b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3b2e19488fc6a5f51574d874e546173c1835d10b","html_url":"https://github.com/jacquev6/PyGithub/commit/3b2e19488fc6a5f51574d874e546173c1835d10b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3b2e19488fc6a5f51574d874e546173c1835d10b/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ed32e78da1303962afaf8fa0d616a1828fdaa80b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed32e78da1303962afaf8fa0d616a1828fdaa80b","html_url":"https://github.com/jacquev6/PyGithub/commit/ed32e78da1303962afaf8fa0d616a1828fdaa80b"}]},{"sha":"ced048663ba392bfee2543cea5f5fbf875771c0e","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:29:13Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:29:13Z"},"message":"Update Comparision.py","tree":{"sha":"25c0fef0fa652ad8bce55c3efbd10028298eb24f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/25c0fef0fa652ad8bce55c3efbd10028298eb24f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ced048663ba392bfee2543cea5f5fbf875771c0e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ced048663ba392bfee2543cea5f5fbf875771c0e","html_url":"https://github.com/jacquev6/PyGithub/commit/ced048663ba392bfee2543cea5f5fbf875771c0e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ced048663ba392bfee2543cea5f5fbf875771c0e/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"3b2e19488fc6a5f51574d874e546173c1835d10b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3b2e19488fc6a5f51574d874e546173c1835d10b","html_url":"https://github.com/jacquev6/PyGithub/commit/3b2e19488fc6a5f51574d874e546173c1835d10b"}]},{"sha":"0c13da45929dbc528a4f8f14f8ce54df15888660","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:31:45Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:31:45Z"},"message":"Update ContentFile.py","tree":{"sha":"a9d12c606be5d39883e814a16deca4c959374973","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a9d12c606be5d39883e814a16deca4c959374973"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0c13da45929dbc528a4f8f14f8ce54df15888660","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0c13da45929dbc528a4f8f14f8ce54df15888660","html_url":"https://github.com/jacquev6/PyGithub/commit/0c13da45929dbc528a4f8f14f8ce54df15888660","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0c13da45929dbc528a4f8f14f8ce54df15888660/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ced048663ba392bfee2543cea5f5fbf875771c0e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ced048663ba392bfee2543cea5f5fbf875771c0e","html_url":"https://github.com/jacquev6/PyGithub/commit/ced048663ba392bfee2543cea5f5fbf875771c0e"}]},{"sha":"c15cb6575b88b56b48fb21e66931ab2108c8b23c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:33:25Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:33:25Z"},"message":"Update Download.py","tree":{"sha":"77bb2d83e0989950f5b688505b40ee3bfc3274aa","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/77bb2d83e0989950f5b688505b40ee3bfc3274aa"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c15cb6575b88b56b48fb21e66931ab2108c8b23c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c15cb6575b88b56b48fb21e66931ab2108c8b23c","html_url":"https://github.com/jacquev6/PyGithub/commit/c15cb6575b88b56b48fb21e66931ab2108c8b23c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c15cb6575b88b56b48fb21e66931ab2108c8b23c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0c13da45929dbc528a4f8f14f8ce54df15888660","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0c13da45929dbc528a4f8f14f8ce54df15888660","html_url":"https://github.com/jacquev6/PyGithub/commit/0c13da45929dbc528a4f8f14f8ce54df15888660"}]},{"sha":"dc8173a5328cede580cae7e2bbf053ee98185d4e","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:39:34Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:39:34Z"},"message":"Update Gist*.py","tree":{"sha":"3d7859d27a4f4ef40a728f1787dea342b9f0d904","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/3d7859d27a4f4ef40a728f1787dea342b9f0d904"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/dc8173a5328cede580cae7e2bbf053ee98185d4e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc8173a5328cede580cae7e2bbf053ee98185d4e","html_url":"https://github.com/jacquev6/PyGithub/commit/dc8173a5328cede580cae7e2bbf053ee98185d4e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc8173a5328cede580cae7e2bbf053ee98185d4e/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c15cb6575b88b56b48fb21e66931ab2108c8b23c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c15cb6575b88b56b48fb21e66931ab2108c8b23c","html_url":"https://github.com/jacquev6/PyGithub/commit/c15cb6575b88b56b48fb21e66931ab2108c8b23c"}]},{"sha":"b43de50dc4f4a538e284645b4f83b597d008a8a2","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:48:08Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:48:08Z"},"message":"Update GitBlob.py","tree":{"sha":"fa891e8f586348ce6d20aa33c7a53215bb3f8eed","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/fa891e8f586348ce6d20aa33c7a53215bb3f8eed"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/b43de50dc4f4a538e284645b4f83b597d008a8a2","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b43de50dc4f4a538e284645b4f83b597d008a8a2","html_url":"https://github.com/jacquev6/PyGithub/commit/b43de50dc4f4a538e284645b4f83b597d008a8a2","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b43de50dc4f4a538e284645b4f83b597d008a8a2/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"dc8173a5328cede580cae7e2bbf053ee98185d4e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc8173a5328cede580cae7e2bbf053ee98185d4e","html_url":"https://github.com/jacquev6/PyGithub/commit/dc8173a5328cede580cae7e2bbf053ee98185d4e"}]},{"sha":"1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:51:12Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:51:12Z"},"message":"Update GitRef.py","tree":{"sha":"5bb940a1d3d1ca30ee86ae9e25fe56aee5132708","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/5bb940a1d3d1ca30ee86ae9e25fe56aee5132708"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","html_url":"https://github.com/jacquev6/PyGithub/commit/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"b43de50dc4f4a538e284645b4f83b597d008a8a2","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b43de50dc4f4a538e284645b4f83b597d008a8a2","html_url":"https://github.com/jacquev6/PyGithub/commit/b43de50dc4f4a538e284645b4f83b597d008a8a2"}]},{"sha":"c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:52:57Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:52:57Z"},"message":"Update GitTag.py","tree":{"sha":"86dc08675585c9a8631152f53fa61f7be7fd76ea","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/86dc08675585c9a8631152f53fa61f7be7fd76ea"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","html_url":"https://github.com/jacquev6/PyGithub/commit/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","html_url":"https://github.com/jacquev6/PyGithub/commit/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7"}]},{"sha":"038e35cb3d40f85b35b6fbe0807f9c761c474310","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:55:42Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:55:42Z"},"message":"Update GitTree","tree":{"sha":"48f4d2fd9511201c76ada8f1219cae44b427befd","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/48f4d2fd9511201c76ada8f1219cae44b427befd"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/038e35cb3d40f85b35b6fbe0807f9c761c474310","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/038e35cb3d40f85b35b6fbe0807f9c761c474310","html_url":"https://github.com/jacquev6/PyGithub/commit/038e35cb3d40f85b35b6fbe0807f9c761c474310","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/038e35cb3d40f85b35b6fbe0807f9c761c474310/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","html_url":"https://github.com/jacquev6/PyGithub/commit/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8"}]},{"sha":"044a000d7647e9134c69378f760ff1a2bd141f4d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:58:07Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:58:07Z"},"message":"Update Hook.py","tree":{"sha":"2372a21476b8ec8784687cc470382148733a92ed","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/2372a21476b8ec8784687cc470382148733a92ed"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/044a000d7647e9134c69378f760ff1a2bd141f4d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/044a000d7647e9134c69378f760ff1a2bd141f4d","html_url":"https://github.com/jacquev6/PyGithub/commit/044a000d7647e9134c69378f760ff1a2bd141f4d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/044a000d7647e9134c69378f760ff1a2bd141f4d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"038e35cb3d40f85b35b6fbe0807f9c761c474310","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/038e35cb3d40f85b35b6fbe0807f9c761c474310","html_url":"https://github.com/jacquev6/PyGithub/commit/038e35cb3d40f85b35b6fbe0807f9c761c474310"}]},{"sha":"49a69c9425789cfb21c49888a144b123ae564cf3","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:08:54Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:08:54Z"},"message":"Update Issue.py","tree":{"sha":"a32e11d7c6e916c0600ec08dbc9298423e4efefb","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a32e11d7c6e916c0600ec08dbc9298423e4efefb"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/49a69c9425789cfb21c49888a144b123ae564cf3","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/49a69c9425789cfb21c49888a144b123ae564cf3","html_url":"https://github.com/jacquev6/PyGithub/commit/49a69c9425789cfb21c49888a144b123ae564cf3","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/49a69c9425789cfb21c49888a144b123ae564cf3/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"044a000d7647e9134c69378f760ff1a2bd141f4d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/044a000d7647e9134c69378f760ff1a2bd141f4d","html_url":"https://github.com/jacquev6/PyGithub/commit/044a000d7647e9134c69378f760ff1a2bd141f4d"}]},{"sha":"8f2ba4f522dbae090b8287663a9a1a88283803b4","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:13:22Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:13:22Z"},"message":"Update IssueComment.py","tree":{"sha":"d7287eda45c3e008132a1650f49dbf124b50bc56","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d7287eda45c3e008132a1650f49dbf124b50bc56"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/8f2ba4f522dbae090b8287663a9a1a88283803b4","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8f2ba4f522dbae090b8287663a9a1a88283803b4","html_url":"https://github.com/jacquev6/PyGithub/commit/8f2ba4f522dbae090b8287663a9a1a88283803b4","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8f2ba4f522dbae090b8287663a9a1a88283803b4/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"49a69c9425789cfb21c49888a144b123ae564cf3","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/49a69c9425789cfb21c49888a144b123ae564cf3","html_url":"https://github.com/jacquev6/PyGithub/commit/49a69c9425789cfb21c49888a144b123ae564cf3"}]},{"sha":"7d40b9eae87fb1631f358e3c09a9d691a942f258","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:17:26Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:17:26Z"},"message":"Update IssueEvent.py","tree":{"sha":"4171bd3cc8c8ca69c351ea2bf6b5d19900d6c1c1","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/4171bd3cc8c8ca69c351ea2bf6b5d19900d6c1c1"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/7d40b9eae87fb1631f358e3c09a9d691a942f258","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/7d40b9eae87fb1631f358e3c09a9d691a942f258","html_url":"https://github.com/jacquev6/PyGithub/commit/7d40b9eae87fb1631f358e3c09a9d691a942f258","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/7d40b9eae87fb1631f358e3c09a9d691a942f258/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"8f2ba4f522dbae090b8287663a9a1a88283803b4","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8f2ba4f522dbae090b8287663a9a1a88283803b4","html_url":"https://github.com/jacquev6/PyGithub/commit/8f2ba4f522dbae090b8287663a9a1a88283803b4"}]},{"sha":"175488270a65a97a42c7bc3fd0bf42676ea4a6e3","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:21:22Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:21:22Z"},"message":"Update Label.py","tree":{"sha":"b2fb450a7dfd492b40bca942f761615a1ac6a342","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/b2fb450a7dfd492b40bca942f761615a1ac6a342"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/175488270a65a97a42c7bc3fd0bf42676ea4a6e3","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/175488270a65a97a42c7bc3fd0bf42676ea4a6e3","html_url":"https://github.com/jacquev6/PyGithub/commit/175488270a65a97a42c7bc3fd0bf42676ea4a6e3","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/175488270a65a97a42c7bc3fd0bf42676ea4a6e3/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"7d40b9eae87fb1631f358e3c09a9d691a942f258","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/7d40b9eae87fb1631f358e3c09a9d691a942f258","html_url":"https://github.com/jacquev6/PyGithub/commit/7d40b9eae87fb1631f358e3c09a9d691a942f258"}]},{"sha":"e4baf577ed5445bbc156c123ccbd7da3c1a3b650","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:24:27Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:24:27Z"},"message":"Update Milestone.py","tree":{"sha":"6cd4d4a0cc49e8a0ecacc793fccdf99e66668cd2","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6cd4d4a0cc49e8a0ecacc793fccdf99e66668cd2"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e4baf577ed5445bbc156c123ccbd7da3c1a3b650","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e4baf577ed5445bbc156c123ccbd7da3c1a3b650","html_url":"https://github.com/jacquev6/PyGithub/commit/e4baf577ed5445bbc156c123ccbd7da3c1a3b650","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e4baf577ed5445bbc156c123ccbd7da3c1a3b650/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"175488270a65a97a42c7bc3fd0bf42676ea4a6e3","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/175488270a65a97a42c7bc3fd0bf42676ea4a6e3","html_url":"https://github.com/jacquev6/PyGithub/commit/175488270a65a97a42c7bc3fd0bf42676ea4a6e3"}]},{"sha":"ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:57:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:57:10Z"},"message":"Update NamedUser.py","tree":{"sha":"22c59fcb82b68071233ebe394ed249d85304b589","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/22c59fcb82b68071233ebe394ed249d85304b589"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","html_url":"https://github.com/jacquev6/PyGithub/commit/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"e4baf577ed5445bbc156c123ccbd7da3c1a3b650","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e4baf577ed5445bbc156c123ccbd7da3c1a3b650","html_url":"https://github.com/jacquev6/PyGithub/commit/e4baf577ed5445bbc156c123ccbd7da3c1a3b650"}]},{"sha":"6cb6e8d232f84e7456c184a4cd055281bb0dba07","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:58:25Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:58:25Z"},"message":"Update Notification.py","tree":{"sha":"12744defe09c67111d1ce8454619db76441c74c2","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/12744defe09c67111d1ce8454619db76441c74c2"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6cb6e8d232f84e7456c184a4cd055281bb0dba07","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb6e8d232f84e7456c184a4cd055281bb0dba07","html_url":"https://github.com/jacquev6/PyGithub/commit/6cb6e8d232f84e7456c184a4cd055281bb0dba07","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb6e8d232f84e7456c184a4cd055281bb0dba07/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","html_url":"https://github.com/jacquev6/PyGithub/commit/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c"}]},{"sha":"ef912af6b79414351de245aa7a6919cad461ca50","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:01:13Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:01:13Z"},"message":"Update Organization.py","tree":{"sha":"25eb4e93c5716005647e58fc78b02258d819e3b8","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/25eb4e93c5716005647e58fc78b02258d819e3b8"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ef912af6b79414351de245aa7a6919cad461ca50","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ef912af6b79414351de245aa7a6919cad461ca50","html_url":"https://github.com/jacquev6/PyGithub/commit/ef912af6b79414351de245aa7a6919cad461ca50","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ef912af6b79414351de245aa7a6919cad461ca50/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"6cb6e8d232f84e7456c184a4cd055281bb0dba07","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb6e8d232f84e7456c184a4cd055281bb0dba07","html_url":"https://github.com/jacquev6/PyGithub/commit/6cb6e8d232f84e7456c184a4cd055281bb0dba07"}]},{"sha":"0e842637a6052129b1706419a66597f419b4b2ba","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:03:41Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:03:41Z"},"message":"Update PullRequest.py","tree":{"sha":"e3ecc0ea2dd602e1eab33f6c384007cd795baa3b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e3ecc0ea2dd602e1eab33f6c384007cd795baa3b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0e842637a6052129b1706419a66597f419b4b2ba","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e842637a6052129b1706419a66597f419b4b2ba","html_url":"https://github.com/jacquev6/PyGithub/commit/0e842637a6052129b1706419a66597f419b4b2ba","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e842637a6052129b1706419a66597f419b4b2ba/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ef912af6b79414351de245aa7a6919cad461ca50","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ef912af6b79414351de245aa7a6919cad461ca50","html_url":"https://github.com/jacquev6/PyGithub/commit/ef912af6b79414351de245aa7a6919cad461ca50"}]},{"sha":"3c1d17cd649e79ff7c97d2c68daffbf6529ed969","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:13:03Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:13:03Z"},"message":"Update Repository.py","tree":{"sha":"95d2cbe17bc8a248b9a62f29bff961a4fbf9ecfe","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/95d2cbe17bc8a248b9a62f29bff961a4fbf9ecfe"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/3c1d17cd649e79ff7c97d2c68daffbf6529ed969","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3c1d17cd649e79ff7c97d2c68daffbf6529ed969","html_url":"https://github.com/jacquev6/PyGithub/commit/3c1d17cd649e79ff7c97d2c68daffbf6529ed969","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3c1d17cd649e79ff7c97d2c68daffbf6529ed969/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0e842637a6052129b1706419a66597f419b4b2ba","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e842637a6052129b1706419a66597f419b4b2ba","html_url":"https://github.com/jacquev6/PyGithub/commit/0e842637a6052129b1706419a66597f419b4b2ba"}]},{"sha":"1070631c73f02e1ee6b03c55155086d33791499e","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:18:01Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:18:01Z"},"message":"Update Team.py","tree":{"sha":"0cb42345203225124267c4f866f3747b93e6277c","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/0cb42345203225124267c4f866f3747b93e6277c"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1070631c73f02e1ee6b03c55155086d33791499e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1070631c73f02e1ee6b03c55155086d33791499e","html_url":"https://github.com/jacquev6/PyGithub/commit/1070631c73f02e1ee6b03c55155086d33791499e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1070631c73f02e1ee6b03c55155086d33791499e/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"3c1d17cd649e79ff7c97d2c68daffbf6529ed969","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3c1d17cd649e79ff7c97d2c68daffbf6529ed969","html_url":"https://github.com/jacquev6/PyGithub/commit/3c1d17cd649e79ff7c97d2c68daffbf6529ed969"}]},{"sha":"c4e8972be12ba249a06cd4c40499e0b32011e7f5","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:19:11Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:19:11Z"},"message":"Update UserKey.py","tree":{"sha":"dc077fcaedfee625d520412e41485893c351c150","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/dc077fcaedfee625d520412e41485893c351c150"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c4e8972be12ba249a06cd4c40499e0b32011e7f5","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c4e8972be12ba249a06cd4c40499e0b32011e7f5","html_url":"https://github.com/jacquev6/PyGithub/commit/c4e8972be12ba249a06cd4c40499e0b32011e7f5","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c4e8972be12ba249a06cd4c40499e0b32011e7f5/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"1070631c73f02e1ee6b03c55155086d33791499e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1070631c73f02e1ee6b03c55155086d33791499e","html_url":"https://github.com/jacquev6/PyGithub/commit/1070631c73f02e1ee6b03c55155086d33791499e"}]},{"sha":"8a301701db354408b63273f78ece6887a1677e55","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:25:29Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:25:29Z"},"message":"Remove helper method in PaginatedList.py","tree":{"sha":"639f5560d925aa1b19e29f3eeb74c7e5f11174cc","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/639f5560d925aa1b19e29f3eeb74c7e5f11174cc"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/8a301701db354408b63273f78ece6887a1677e55","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a301701db354408b63273f78ece6887a1677e55","html_url":"https://github.com/jacquev6/PyGithub/commit/8a301701db354408b63273f78ece6887a1677e55","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a301701db354408b63273f78ece6887a1677e55/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c4e8972be12ba249a06cd4c40499e0b32011e7f5","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c4e8972be12ba249a06cd4c40499e0b32011e7f5","html_url":"https://github.com/jacquev6/PyGithub/commit/c4e8972be12ba249a06cd4c40499e0b32011e7f5"}]},{"sha":"3f6d1b6b705de6ea9632021987e55d41875f0102","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:27:37Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:27:37Z"},"message":"Remove helper method in Legacy.py","tree":{"sha":"cdc64db71461393d95d58e89a9a0387fe5d3b447","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/cdc64db71461393d95d58e89a9a0387fe5d3b447"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/3f6d1b6b705de6ea9632021987e55d41875f0102","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3f6d1b6b705de6ea9632021987e55d41875f0102","html_url":"https://github.com/jacquev6/PyGithub/commit/3f6d1b6b705de6ea9632021987e55d41875f0102","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3f6d1b6b705de6ea9632021987e55d41875f0102/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"8a301701db354408b63273f78ece6887a1677e55","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a301701db354408b63273f78ece6887a1677e55","html_url":"https://github.com/jacquev6/PyGithub/commit/8a301701db354408b63273f78ece6887a1677e55"}]},{"sha":"30d9d499a1b44552ab9a28ef7317aa2098daafd7","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:32:32Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:32:32Z"},"message":"Clean up","tree":{"sha":"971191c9d4fbd001727beeeb2ff9a482b80e2b39","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/971191c9d4fbd001727beeeb2ff9a482b80e2b39"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/30d9d499a1b44552ab9a28ef7317aa2098daafd7","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/30d9d499a1b44552ab9a28ef7317aa2098daafd7","html_url":"https://github.com/jacquev6/PyGithub/commit/30d9d499a1b44552ab9a28ef7317aa2098daafd7","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/30d9d499a1b44552ab9a28ef7317aa2098daafd7/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"3f6d1b6b705de6ea9632021987e55d41875f0102","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3f6d1b6b705de6ea9632021987e55d41875f0102","html_url":"https://github.com/jacquev6/PyGithub/commit/3f6d1b6b705de6ea9632021987e55d41875f0102"}]},{"sha":"912bec79d2dd2479e5e32118c66ee9a647b46332","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:45:01Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:45:01Z"},"message":"Update copyright information","tree":{"sha":"9ce5267aa0ed70277a09594a84c881e9e04da2e5","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9ce5267aa0ed70277a09594a84c881e9e04da2e5"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/912bec79d2dd2479e5e32118c66ee9a647b46332","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/912bec79d2dd2479e5e32118c66ee9a647b46332","html_url":"https://github.com/jacquev6/PyGithub/commit/912bec79d2dd2479e5e32118c66ee9a647b46332","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/912bec79d2dd2479e5e32118c66ee9a647b46332/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"30d9d499a1b44552ab9a28ef7317aa2098daafd7","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/30d9d499a1b44552ab9a28ef7317aa2098daafd7","html_url":"https://github.com/jacquev6/PyGithub/commit/30d9d499a1b44552ab9a28ef7317aa2098daafd7"}]},{"sha":"1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T11:25:05Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T11:25:05Z"},"message":"Add debug / test mechanism","tree":{"sha":"6cc4f7080010a73043a4d743a488b207f7117f42","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6cc4f7080010a73043a4d743a488b207f7117f42"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","html_url":"https://github.com/jacquev6/PyGithub/commit/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"912bec79d2dd2479e5e32118c66ee9a647b46332","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/912bec79d2dd2479e5e32118c66ee9a647b46332","html_url":"https://github.com/jacquev6/PyGithub/commit/912bec79d2dd2479e5e32118c66ee9a647b46332"}]},{"sha":"e06257d06017b72bb57b15b043e6f16d4b6eb568","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T12:58:29Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T12:58:29Z"},"message":"Enable debug in TestCase","tree":{"sha":"c99afd32d144d223b8dea8dc3d1bc612a5e7b440","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/c99afd32d144d223b8dea8dc3d1bc612a5e7b440"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e06257d06017b72bb57b15b043e6f16d4b6eb568","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e06257d06017b72bb57b15b043e6f16d4b6eb568","html_url":"https://github.com/jacquev6/PyGithub/commit/e06257d06017b72bb57b15b043e6f16d4b6eb568","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e06257d06017b72bb57b15b043e6f16d4b6eb568/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","html_url":"https://github.com/jacquev6/PyGithub/commit/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80"}]},{"sha":"aa3025271cd918883b31a42fb7b4ce03027b805c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T13:11:12Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T13:11:12Z"},"message":"Assert response headers","tree":{"sha":"9e5ec5a1f82ccfe07e2abeb586b7d39b98392df2","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9e5ec5a1f82ccfe07e2abeb586b7d39b98392df2"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/aa3025271cd918883b31a42fb7b4ce03027b805c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/aa3025271cd918883b31a42fb7b4ce03027b805c","html_url":"https://github.com/jacquev6/PyGithub/commit/aa3025271cd918883b31a42fb7b4ce03027b805c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/aa3025271cd918883b31a42fb7b4ce03027b805c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"e06257d06017b72bb57b15b043e6f16d4b6eb568","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e06257d06017b72bb57b15b043e6f16d4b6eb568","html_url":"https://github.com/jacquev6/PyGithub/commit/e06257d06017b72bb57b15b043e6f16d4b6eb568"}]},{"sha":"b71329e560795a4df84cb419178ef660824f4c0d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T14:25:20Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T14:25:20Z"},"message":"Implement data persistence","tree":{"sha":"e617e5b89efd45b9839d8e7f61619f00974367bb","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e617e5b89efd45b9839d8e7f61619f00974367bb"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/b71329e560795a4df84cb419178ef660824f4c0d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b71329e560795a4df84cb419178ef660824f4c0d","html_url":"https://github.com/jacquev6/PyGithub/commit/b71329e560795a4df84cb419178ef660824f4c0d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b71329e560795a4df84cb419178ef660824f4c0d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"aa3025271cd918883b31a42fb7b4ce03027b805c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/aa3025271cd918883b31a42fb7b4ce03027b805c","html_url":"https://github.com/jacquev6/PyGithub/commit/aa3025271cd918883b31a42fb7b4ce03027b805c"}]},{"sha":"bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:01:40Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:01:40Z"},"message":"Add update() method","tree":{"sha":"790ed722bb219aeb47c13f073a41ccb4e67a0ae0","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/790ed722bb219aeb47c13f073a41ccb4e67a0ae0"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","html_url":"https://github.com/jacquev6/PyGithub/commit/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"b71329e560795a4df84cb419178ef660824f4c0d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b71329e560795a4df84cb419178ef660824f4c0d","html_url":"https://github.com/jacquev6/PyGithub/commit/b71329e560795a4df84cb419178ef660824f4c0d"}]},{"sha":"1e9ec2df089973db73aaf99b4ef147efd4614e7c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:04:07Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:04:07Z"},"message":"Add NotModifiedException class","tree":{"sha":"68bf8de0788f5e0a6675d07bceaeb114183315ba","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/68bf8de0788f5e0a6675d07bceaeb114183315ba"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1e9ec2df089973db73aaf99b4ef147efd4614e7c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1e9ec2df089973db73aaf99b4ef147efd4614e7c","html_url":"https://github.com/jacquev6/PyGithub/commit/1e9ec2df089973db73aaf99b4ef147efd4614e7c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1e9ec2df089973db73aaf99b4ef147efd4614e7c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","html_url":"https://github.com/jacquev6/PyGithub/commit/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6"}]},{"sha":"6fd05baf6bea732dd846e08c40891c28060e7c64","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:09:30Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:09:30Z"},"message":"Handle response code 304","tree":{"sha":"8601556063c365eb7c636a3459eca81b5e717e21","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/8601556063c365eb7c636a3459eca81b5e717e21"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6fd05baf6bea732dd846e08c40891c28060e7c64","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6fd05baf6bea732dd846e08c40891c28060e7c64","html_url":"https://github.com/jacquev6/PyGithub/commit/6fd05baf6bea732dd846e08c40891c28060e7c64","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6fd05baf6bea732dd846e08c40891c28060e7c64/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"1e9ec2df089973db73aaf99b4ef147efd4614e7c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1e9ec2df089973db73aaf99b4ef147efd4614e7c","html_url":"https://github.com/jacquev6/PyGithub/commit/1e9ec2df089973db73aaf99b4ef147efd4614e7c"}]},{"sha":"5b09f6c82191601cad92076ad4761fe927c511ed","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:17:59Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:17:59Z"},"message":"Implement conditional request","tree":{"sha":"d6c3d2b807635ecd9a9129b1a99d0e2f6758d440","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d6c3d2b807635ecd9a9129b1a99d0e2f6758d440"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/5b09f6c82191601cad92076ad4761fe927c511ed","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5b09f6c82191601cad92076ad4761fe927c511ed","html_url":"https://github.com/jacquev6/PyGithub/commit/5b09f6c82191601cad92076ad4761fe927c511ed","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5b09f6c82191601cad92076ad4761fe927c511ed/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"6fd05baf6bea732dd846e08c40891c28060e7c64","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6fd05baf6bea732dd846e08c40891c28060e7c64","html_url":"https://github.com/jacquev6/PyGithub/commit/6fd05baf6bea732dd846e08c40891c28060e7c64"}]},{"sha":"1955f7b39d4aeef19356a8269e6430537fcc3006","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:40:21Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T20:24:32Z"},"message":"Use POST /gists/:id/forks instead of POST /gists/:id/fork","tree":{"sha":"96255698cf321052b8d1990af1b282e7e7d9b094","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/96255698cf321052b8d1990af1b282e7e7d9b094"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1955f7b39d4aeef19356a8269e6430537fcc3006","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1955f7b39d4aeef19356a8269e6430537fcc3006","html_url":"https://github.com/jacquev6/PyGithub/commit/1955f7b39d4aeef19356a8269e6430537fcc3006","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1955f7b39d4aeef19356a8269e6430537fcc3006/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"ed781f8b1b96e1d2a342d36ca53114ea28862fa8","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","html_url":"https://github.com/jacquev6/PyGithub/commit/ed781f8b1b96e1d2a342d36ca53114ea28862fa8"}]},{"sha":"0f369ba218414beb8d782904b1f09d4711c82cb7","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:51:09Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T20:25:44Z"},"message":"Use POST /repos/:owner/:repo/hooks/:id/tests instead of POST /repos/:owner/:repo/hooks/:id/test","tree":{"sha":"9df3a12c5a595613c179195787593cd18f50df60","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9df3a12c5a595613c179195787593cd18f50df60"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0f369ba218414beb8d782904b1f09d4711c82cb7","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f369ba218414beb8d782904b1f09d4711c82cb7","html_url":"https://github.com/jacquev6/PyGithub/commit/0f369ba218414beb8d782904b1f09d4711c82cb7","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f369ba218414beb8d782904b1f09d4711c82cb7/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"1955f7b39d4aeef19356a8269e6430537fcc3006","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1955f7b39d4aeef19356a8269e6430537fcc3006","html_url":"https://github.com/jacquev6/PyGithub/commit/1955f7b39d4aeef19356a8269e6430537fcc3006"}]},{"sha":"e384a52971a8452b9c8eb32ed862e88cd828ee8e","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T19:43:08Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T20:26:58Z"},"message":"NamedUser.has_in_following","tree":{"sha":"becbc15254d47f078ee3e70bee997cea6ad201d0","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/becbc15254d47f078ee3e70bee997cea6ad201d0"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e384a52971a8452b9c8eb32ed862e88cd828ee8e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e384a52971a8452b9c8eb32ed862e88cd828ee8e","html_url":"https://github.com/jacquev6/PyGithub/commit/e384a52971a8452b9c8eb32ed862e88cd828ee8e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e384a52971a8452b9c8eb32ed862e88cd828ee8e/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"0f369ba218414beb8d782904b1f09d4711c82cb7","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f369ba218414beb8d782904b1f09d4711c82cb7","html_url":"https://github.com/jacquev6/PyGithub/commit/0f369ba218414beb8d782904b1f09d4711c82cb7"}]},{"sha":"1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T19:54:00Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T20:28:15Z"},"message":"Github.get_repos (to get all public repositories)","tree":{"sha":"3164e655a882efc8233e688223b17703f7ee0e81","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/3164e655a882efc8233e688223b17703f7ee0e81"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","html_url":"https://github.com/jacquev6/PyGithub/commit/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"e384a52971a8452b9c8eb32ed862e88cd828ee8e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e384a52971a8452b9c8eb32ed862e88cd828ee8e","html_url":"https://github.com/jacquev6/PyGithub/commit/e384a52971a8452b9c8eb32ed862e88cd828ee8e"}]},{"sha":"70a7e9c83dec2bf6b549dc5c77d30b53afb32457","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T23:45:27Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T23:45:27Z"},"message":"Fix update","tree":{"sha":"f99d30ab74ea95fedefb33a8b1b2c77903fbd698","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/f99d30ab74ea95fedefb33a8b1b2c77903fbd698"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/70a7e9c83dec2bf6b549dc5c77d30b53afb32457","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/70a7e9c83dec2bf6b549dc5c77d30b53afb32457","html_url":"https://github.com/jacquev6/PyGithub/commit/70a7e9c83dec2bf6b549dc5c77d30b53afb32457","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/70a7e9c83dec2bf6b549dc5c77d30b53afb32457/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"5b09f6c82191601cad92076ad4761fe927c511ed","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5b09f6c82191601cad92076ad4761fe927c511ed","html_url":"https://github.com/jacquev6/PyGithub/commit/5b09f6c82191601cad92076ad4761fe927c511ed"}]},{"sha":"d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-22T00:45:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-22T00:45:10Z"},"message":"Add test record helper","tree":{"sha":"e6e15fccb5b256bba3db1d4fc89088b733de227b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e6e15fccb5b256bba3db1d4fc89088b733de227b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","html_url":"https://github.com/jacquev6/PyGithub/commit/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"70a7e9c83dec2bf6b549dc5c77d30b53afb32457","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/70a7e9c83dec2bf6b549dc5c77d30b53afb32457","html_url":"https://github.com/jacquev6/PyGithub/commit/70a7e9c83dec2bf6b549dc5c77d30b53afb32457"}]},{"sha":"c7593e84c4a92a044b717b7311c2b6ad8d9a5917","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-22T02:20:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-22T02:20:10Z"},"message":"Add test case for conditional request","tree":{"sha":"bbf62558b39720fc7acab1c6b26e4b9260cdc897","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/bbf62558b39720fc7acab1c6b26e4b9260cdc897"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c7593e84c4a92a044b717b7311c2b6ad8d9a5917","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7593e84c4a92a044b717b7311c2b6ad8d9a5917","html_url":"https://github.com/jacquev6/PyGithub/commit/c7593e84c4a92a044b717b7311c2b6ad8d9a5917","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7593e84c4a92a044b717b7311c2b6ad8d9a5917/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","html_url":"https://github.com/jacquev6/PyGithub/commit/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7"}]},{"sha":"5c475c7683b2a57ee053d35586248f24febb6ebe","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:12:38Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:12:38Z"},"message":"First review of #192 (pep8, headers... nothing important)\n\n./manage.sh check\n./manage.sh fix_headers","tree":{"sha":"c874a52834343436bb9e1062a9edb11739d0de2b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/c874a52834343436bb9e1062a9edb11739d0de2b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/5c475c7683b2a57ee053d35586248f24febb6ebe","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5c475c7683b2a57ee053d35586248f24febb6ebe","html_url":"https://github.com/jacquev6/PyGithub/commit/5c475c7683b2a57ee053d35586248f24febb6ebe","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5c475c7683b2a57ee053d35586248f24febb6ebe/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"aa3025271cd918883b31a42fb7b4ce03027b805c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/aa3025271cd918883b31a42fb7b4ce03027b805c","html_url":"https://github.com/jacquev6/PyGithub/commit/aa3025271cd918883b31a42fb7b4ce03027b805c"}]},{"sha":"f2de1fbfcccd1bbb3da722489d361d1937e09860","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:22:07Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:22:07Z"},"message":"Don't fix headers in /build","tree":{"sha":"6151d6667cf979d47a44e9a4852f9e5894eea19a","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6151d6667cf979d47a44e9a4852f9e5894eea19a"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/f2de1fbfcccd1bbb3da722489d361d1937e09860","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2de1fbfcccd1bbb3da722489d361d1937e09860","html_url":"https://github.com/jacquev6/PyGithub/commit/f2de1fbfcccd1bbb3da722489d361d1937e09860","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2de1fbfcccd1bbb3da722489d361d1937e09860/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","html_url":"https://github.com/jacquev6/PyGithub/commit/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb"}]},{"sha":"8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:30:14Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:30:14Z"},"message":"Merge branch 'topic/RememberHeaders' into develop (#192)\n\nConflicts:\n\tgithub/Issue.py\n\tgithub/MainClass.py\n\tgithub/PaginatedList.py\n\tgithub/Repository.py\n\tgithub/Requester.py","tree":{"sha":"61011f6ebafc003fa6561ed990691d0c21611ea2","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/61011f6ebafc003fa6561ed990691d0c21611ea2"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","html_url":"https://github.com/jacquev6/PyGithub/commit/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"f2de1fbfcccd1bbb3da722489d361d1937e09860","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2de1fbfcccd1bbb3da722489d361d1937e09860","html_url":"https://github.com/jacquev6/PyGithub/commit/f2de1fbfcccd1bbb3da722489d361d1937e09860"},{"sha":"5c475c7683b2a57ee053d35586248f24febb6ebe","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5c475c7683b2a57ee053d35586248f24febb6ebe","html_url":"https://github.com/jacquev6/PyGithub/commit/5c475c7683b2a57ee053d35586248f24febb6ebe"}]},{"sha":"ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:44:38Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:44:38Z"},"message":"Fix merge of #192\n\nOne branch modified signature of constructors,\nanother branch added a call to a constructor.","tree":{"sha":"ea54567a0eff56ab2c1701783a2d46a9cd9b1b3d","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/ea54567a0eff56ab2c1701783a2d46a9cd9b1b3d"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","html_url":"https://github.com/jacquev6/PyGithub/commit/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","html_url":"https://github.com/jacquev6/PyGithub/commit/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd"}]},{"sha":"cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T09:01:51Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T09:01:51Z"},"message":"Merge branch 'develop' into topic/ConditionalRequest\n\nConflicts:\n\t.gitignore\n\tgithub/Requester.py","tree":{"sha":"0d8bb0e1e0d530a2061d0d898a96b0f0ad6a5f25","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/0d8bb0e1e0d530a2061d0d898a96b0f0ad6a5f25"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","html_url":"https://github.com/jacquev6/PyGithub/commit/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"c7593e84c4a92a044b717b7311c2b6ad8d9a5917","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7593e84c4a92a044b717b7311c2b6ad8d9a5917","html_url":"https://github.com/jacquev6/PyGithub/commit/c7593e84c4a92a044b717b7311c2b6ad8d9a5917"},{"sha":"ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","html_url":"https://github.com/jacquev6/PyGithub/commit/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008"}]},{"sha":"1787765a61958617d47e764a0bea2acd70c84f72","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T09:41:15Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T09:41:15Z"},"message":"Review of #189: use dict.get\n\nhttp://docs.python.org/2/library/stdtypes.html#dict.get","tree":{"sha":"7cb1da804d8cec4692c26b5a0d35827c151ddde4","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/7cb1da804d8cec4692c26b5a0d35827c151ddde4"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1787765a61958617d47e764a0bea2acd70c84f72","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1787765a61958617d47e764a0bea2acd70c84f72","html_url":"https://github.com/jacquev6/PyGithub/commit/1787765a61958617d47e764a0bea2acd70c84f72","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1787765a61958617d47e764a0bea2acd70c84f72/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","html_url":"https://github.com/jacquev6/PyGithub/commit/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5"}]},{"sha":"0f74e4389b3c0fa57a83083ecfbbf5c331022674","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T10:12:38Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T10:12:38Z"},"message":"Review of #189: pep8, copyrights, style, remarks\n\nFor remarks, run: git grep \"#189\"\nThey are only my first thoughts while reviewing this pull request,\nand should be reviewed themselves.","tree":{"sha":"6704a63e77b81165cb7f8ff4c32bd8455fcdfbdb","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6704a63e77b81165cb7f8ff4c32bd8455fcdfbdb"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0f74e4389b3c0fa57a83083ecfbbf5c331022674","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f74e4389b3c0fa57a83083ecfbbf5c331022674","html_url":"https://github.com/jacquev6/PyGithub/commit/0f74e4389b3c0fa57a83083ecfbbf5c331022674","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f74e4389b3c0fa57a83083ecfbbf5c331022674/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"1787765a61958617d47e764a0bea2acd70c84f72","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1787765a61958617d47e764a0bea2acd70c84f72","html_url":"https://github.com/jacquev6/PyGithub/commit/1787765a61958617d47e764a0bea2acd70c84f72"}]},{"sha":"fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:32:47Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:32:47Z"},"message":"Fix remarks on #189 to #193","tree":{"sha":"acda548d54ec2929d3f556bb09d72082c6cce74c","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/acda548d54ec2929d3f556bb09d72082c6cce74c"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","html_url":"https://github.com/jacquev6/PyGithub/commit/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"0f74e4389b3c0fa57a83083ecfbbf5c331022674","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f74e4389b3c0fa57a83083ecfbbf5c331022674","html_url":"https://github.com/jacquev6/PyGithub/commit/0f74e4389b3c0fa57a83083ecfbbf5c331022674"}]},{"sha":"0413c87c12e688fb4fc38d978a2f275ef791cd48","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:39:19Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:39:19Z"},"message":"Remove _record_.py (#193)\n\nAccording to https://github.com/jacquev6/PyGithub/commit/0f74e4389b3c0fa57a83083ecfbbf5c331022674#commitcomment-3919786","tree":{"sha":"97108cad4736d71906a05fc573936659fb81f386","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/97108cad4736d71906a05fc573936659fb81f386"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0413c87c12e688fb4fc38d978a2f275ef791cd48","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0413c87c12e688fb4fc38d978a2f275ef791cd48","html_url":"https://github.com/jacquev6/PyGithub/commit/0413c87c12e688fb4fc38d978a2f275ef791cd48","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0413c87c12e688fb4fc38d978a2f275ef791cd48/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","html_url":"https://github.com/jacquev6/PyGithub/commit/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c"}]},{"sha":"bc3b819ac554a2132427c9ffe629ef371511213e","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:50:51Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:50:51Z"},"message":"Separate tests for conditional requests (#193)","tree":{"sha":"cebebf12f44ca09fa382c2673f9577bce01d09f8","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/cebebf12f44ca09fa382c2673f9577bce01d09f8"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/bc3b819ac554a2132427c9ffe629ef371511213e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bc3b819ac554a2132427c9ffe629ef371511213e","html_url":"https://github.com/jacquev6/PyGithub/commit/bc3b819ac554a2132427c9ffe629ef371511213e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bc3b819ac554a2132427c9ffe629ef371511213e/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"0413c87c12e688fb4fc38d978a2f275ef791cd48","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0413c87c12e688fb4fc38d978a2f275ef791cd48","html_url":"https://github.com/jacquev6/PyGithub/commit/0413c87c12e688fb4fc38d978a2f275ef791cd48"}]},{"sha":"bae0a37d180a4b224c6aa808d03722908109c57d","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:10:35Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:10:35Z"},"message":"#193: Don't use a try-except for a usual execution flow in GithubObject.update\n\n(and factorize assignment of headers in _storeAndUseAttributes,\nas done for rawData)","tree":{"sha":"d56e13d46c851d333baf0d69053dc6527f1e04d7","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d56e13d46c851d333baf0d69053dc6527f1e04d7"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/bae0a37d180a4b224c6aa808d03722908109c57d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bae0a37d180a4b224c6aa808d03722908109c57d","html_url":"https://github.com/jacquev6/PyGithub/commit/bae0a37d180a4b224c6aa808d03722908109c57d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bae0a37d180a4b224c6aa808d03722908109c57d/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"bc3b819ac554a2132427c9ffe629ef371511213e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bc3b819ac554a2132427c9ffe629ef371511213e","html_url":"https://github.com/jacquev6/PyGithub/commit/bc3b819ac554a2132427c9ffe629ef371511213e"}]},{"sha":"03d7fb012e9d032165c43f93a4c67bc29af9366f","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:15:17Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:15:17Z"},"message":"#193: Add remarks","tree":{"sha":"887977aa41abc6624fdea3d1ffd185decc57ab90","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/887977aa41abc6624fdea3d1ffd185decc57ab90"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/03d7fb012e9d032165c43f93a4c67bc29af9366f","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/03d7fb012e9d032165c43f93a4c67bc29af9366f","html_url":"https://github.com/jacquev6/PyGithub/commit/03d7fb012e9d032165c43f93a4c67bc29af9366f","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/03d7fb012e9d032165c43f93a4c67bc29af9366f/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"bae0a37d180a4b224c6aa808d03722908109c57d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bae0a37d180a4b224c6aa808d03722908109c57d","html_url":"https://github.com/jacquev6/PyGithub/commit/bae0a37d180a4b224c6aa808d03722908109c57d"}]},{"sha":"64cf539c83174f95b3410c7decd2549424385ce1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:31:01Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:31:01Z"},"message":"#193: Add a param to Requester.requestXxx for request headers","tree":{"sha":"d8ce377a13245803f223ae5bf50c09db0544a1be","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d8ce377a13245803f223ae5bf50c09db0544a1be"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/64cf539c83174f95b3410c7decd2549424385ce1","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/64cf539c83174f95b3410c7decd2549424385ce1","html_url":"https://github.com/jacquev6/PyGithub/commit/64cf539c83174f95b3410c7decd2549424385ce1","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/64cf539c83174f95b3410c7decd2549424385ce1/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"03d7fb012e9d032165c43f93a4c67bc29af9366f","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/03d7fb012e9d032165c43f93a4c67bc29af9366f","html_url":"https://github.com/jacquev6/PyGithub/commit/03d7fb012e9d032165c43f93a4c67bc29af9366f"}]},{"sha":"e084b5138106d4ad371a69ca9519862f09c855ae","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T12:51:34Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T12:51:34Z"},"message":"#193: Fix test coverage","tree":{"sha":"e0dc9f5f816e7e6503d60b39b69d5652bd2b77ce","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e0dc9f5f816e7e6503d60b39b69d5652bd2b77ce"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e084b5138106d4ad371a69ca9519862f09c855ae","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e084b5138106d4ad371a69ca9519862f09c855ae","html_url":"https://github.com/jacquev6/PyGithub/commit/e084b5138106d4ad371a69ca9519862f09c855ae","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e084b5138106d4ad371a69ca9519862f09c855ae/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"64cf539c83174f95b3410c7decd2549424385ce1","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/64cf539c83174f95b3410c7decd2549424385ce1","html_url":"https://github.com/jacquev6/PyGithub/commit/64cf539c83174f95b3410c7decd2549424385ce1"}]},{"sha":"020a3c9917f42d98c1761527825061d2db8352fd","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T16:45:16Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T16:45:16Z"},"message":"Move method update to CompletableGithubObject","tree":{"sha":"4c3e987d82799789d0c2586e509cea8c71e0029b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/4c3e987d82799789d0c2586e509cea8c71e0029b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/020a3c9917f42d98c1761527825061d2db8352fd","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/020a3c9917f42d98c1761527825061d2db8352fd","html_url":"https://github.com/jacquev6/PyGithub/commit/020a3c9917f42d98c1761527825061d2db8352fd","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/020a3c9917f42d98c1761527825061d2db8352fd/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"e084b5138106d4ad371a69ca9519862f09c855ae","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e084b5138106d4ad371a69ca9519862f09c855ae","html_url":"https://github.com/jacquev6/PyGithub/commit/e084b5138106d4ad371a69ca9519862f09c855ae"}]},{"sha":"fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T17:05:53Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T17:05:53Z"},"message":"Move the DEBUG_ON_RESPONSE call to Requester.__requestEncode","tree":{"sha":"a7fbeaacbdba31ceb21a46bedfce268411d8dfb8","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a7fbeaacbdba31ceb21a46bedfce268411d8dfb8"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","html_url":"https://github.com/jacquev6/PyGithub/commit/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"020a3c9917f42d98c1761527825061d2db8352fd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/020a3c9917f42d98c1761527825061d2db8352fd","html_url":"https://github.com/jacquev6/PyGithub/commit/020a3c9917f42d98c1761527825061d2db8352fd"}]},{"sha":"38b137fb37c0fdc74f8802a4184518e105db9121","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-23T23:21:41Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-23T23:21:41Z"},"message":"Fix line ending","tree":{"sha":"a4260390d7e3d478aed05009657f4632d25dad84","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a4260390d7e3d478aed05009657f4632d25dad84"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/38b137fb37c0fdc74f8802a4184518e105db9121","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/38b137fb37c0fdc74f8802a4184518e105db9121","html_url":"https://github.com/jacquev6/PyGithub/commit/38b137fb37c0fdc74f8802a4184518e105db9121","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/38b137fb37c0fdc74f8802a4184518e105db9121/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","html_url":"https://github.com/jacquev6/PyGithub/commit/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84"}]},{"sha":"3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-04T21:28:44Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-04T21:28:44Z"},"message":"Implement object persistence\n\nThis follows my proposal for #193.\nLargely inspired by AKFish's work.","tree":{"sha":"b6b62d90fe1b65d103b74fe11a8f01f3ddd1851a","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/b6b62d90fe1b65d103b74fe11a8f01f3ddd1851a"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","html_url":"https://github.com/jacquev6/PyGithub/commit/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"38b137fb37c0fdc74f8802a4184518e105db9121","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/38b137fb37c0fdc74f8802a4184518e105db9121","html_url":"https://github.com/jacquev6/PyGithub/commit/38b137fb37c0fdc74f8802a4184518e105db9121"}]},{"sha":"c412d49c9fd28406156dff664a1f848da1e95d0b","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T15:50:57Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T15:50:57Z"},"message":"Adapt to Python 2.5","tree":{"sha":"6c7ed56808fdd9a1a17b38f397fafd0e0cf1ae2e","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6c7ed56808fdd9a1a17b38f397fafd0e0cf1ae2e"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c412d49c9fd28406156dff664a1f848da1e95d0b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c412d49c9fd28406156dff664a1f848da1e95d0b","html_url":"https://github.com/jacquev6/PyGithub/commit/c412d49c9fd28406156dff664a1f848da1e95d0b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c412d49c9fd28406156dff664a1f848da1e95d0b/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","html_url":"https://github.com/jacquev6/PyGithub/commit/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4"}]},{"sha":"6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T15:53:31Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T15:53:31Z"},"message":"Adapt to Python 2.5 (again:))","tree":{"sha":"7007556096f9edd3ecd48dfe302748ba9d238273","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/7007556096f9edd3ecd48dfe302748ba9d238273"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","html_url":"https://github.com/jacquev6/PyGithub/commit/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"c412d49c9fd28406156dff664a1f848da1e95d0b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c412d49c9fd28406156dff664a1f848da1e95d0b","html_url":"https://github.com/jacquev6/PyGithub/commit/c412d49c9fd28406156dff664a1f848da1e95d0b"}]},{"sha":"d18d1b0354a5c7de920b30ef1e5950a5479dd866","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:01:03Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:01:03Z"},"message":"Update readme","tree":{"sha":"140c1b06794ac9a8130cf3612c604c83f973358f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/140c1b06794ac9a8130cf3612c604c83f973358f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/d18d1b0354a5c7de920b30ef1e5950a5479dd866","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d18d1b0354a5c7de920b30ef1e5950a5479dd866","html_url":"https://github.com/jacquev6/PyGithub/commit/d18d1b0354a5c7de920b30ef1e5950a5479dd866","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d18d1b0354a5c7de920b30ef1e5950a5479dd866/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","html_url":"https://github.com/jacquev6/PyGithub/commit/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69"}]},{"sha":"2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:04:49Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:04:49Z"},"message":"Say thank you to stargazers","tree":{"sha":"6c1c7aadddfcbc9a65fae7d164a9432ab3ce452a","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6c1c7aadddfcbc9a65fae7d164a9432ab3ce452a"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","html_url":"https://github.com/jacquev6/PyGithub/commit/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","html_url":"https://github.com/jacquev6/PyGithub/commit/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008"}]},{"sha":"ab626114db1c798e9269daed295d1e79c36879bb","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:21:07Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:21:07Z"},"message":"Merge branch 'topic/ConditionalRequest' into develop\n\nConflicts:\n\tREADME.rst","tree":{"sha":"c15e38407a8fc7f086a7bf48e02aa5ca7be44e62","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/c15e38407a8fc7f086a7bf48e02aa5ca7be44e62"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ab626114db1c798e9269daed295d1e79c36879bb","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ab626114db1c798e9269daed295d1e79c36879bb","html_url":"https://github.com/jacquev6/PyGithub/commit/ab626114db1c798e9269daed295d1e79c36879bb","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ab626114db1c798e9269daed295d1e79c36879bb/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","html_url":"https://github.com/jacquev6/PyGithub/commit/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5"},{"sha":"d18d1b0354a5c7de920b30ef1e5950a5479dd866","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d18d1b0354a5c7de920b30ef1e5950a5479dd866","html_url":"https://github.com/jacquev6/PyGithub/commit/d18d1b0354a5c7de920b30ef1e5950a5479dd866"}]},{"sha":"1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:23:47Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:23:47Z"},"message":"Don't assume there is a 'message' field in case of error","tree":{"sha":"1eaf1c66ede16d89d6067a0c23f23f93abf83c5e","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/1eaf1c66ede16d89d6067a0c23f23f93abf83c5e"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","html_url":"https://github.com/jacquev6/PyGithub/commit/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"ab626114db1c798e9269daed295d1e79c36879bb","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ab626114db1c798e9269daed295d1e79c36879bb","html_url":"https://github.com/jacquev6/PyGithub/commit/ab626114db1c798e9269daed295d1e79c36879bb"}]},{"sha":"dc610dfaac50dd5bbbd572986cda35f6729aee5b","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T08:51:50Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T08:51:50Z"},"message":"Small fixes and todos","tree":{"sha":"d54e7b47327b5bb25ba38338bfcc4a0c0a61992e","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d54e7b47327b5bb25ba38338bfcc4a0c0a61992e"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/dc610dfaac50dd5bbbd572986cda35f6729aee5b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc610dfaac50dd5bbbd572986cda35f6729aee5b","html_url":"https://github.com/jacquev6/PyGithub/commit/dc610dfaac50dd5bbbd572986cda35f6729aee5b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc610dfaac50dd5bbbd572986cda35f6729aee5b/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","html_url":"https://github.com/jacquev6/PyGithub/commit/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d"}]},{"sha":"2081675afbfed404f6a580bce0ec363bebbfd98b","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:00:59Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:00:59Z"},"message":"Fix doc generation","tree":{"sha":"7aafacfc490987a44d3c73a72669e07d900f4ea9","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/7aafacfc490987a44d3c73a72669e07d900f4ea9"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/2081675afbfed404f6a580bce0ec363bebbfd98b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2081675afbfed404f6a580bce0ec363bebbfd98b","html_url":"https://github.com/jacquev6/PyGithub/commit/2081675afbfed404f6a580bce0ec363bebbfd98b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2081675afbfed404f6a580bce0ec363bebbfd98b/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"dc610dfaac50dd5bbbd572986cda35f6729aee5b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc610dfaac50dd5bbbd572986cda35f6729aee5b","html_url":"https://github.com/jacquev6/PyGithub/commit/dc610dfaac50dd5bbbd572986cda35f6729aee5b"}]},{"sha":"f2feb81dae1b28af80c559db7328f2d6fe017911","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:56:56Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:01:32Z"},"message":"Add default parameters to greatly reduce code redoundancy","tree":{"sha":"075abd28eec29754d4ac96d94fa00e0ee41e9e09","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/075abd28eec29754d4ac96d94fa00e0ee41e9e09"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/f2feb81dae1b28af80c559db7328f2d6fe017911","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2feb81dae1b28af80c559db7328f2d6fe017911","html_url":"https://github.com/jacquev6/PyGithub/commit/f2feb81dae1b28af80c559db7328f2d6fe017911","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2feb81dae1b28af80c559db7328f2d6fe017911/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2081675afbfed404f6a580bce0ec363bebbfd98b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2081675afbfed404f6a580bce0ec363bebbfd98b","html_url":"https://github.com/jacquev6/PyGithub/commit/2081675afbfed404f6a580bce0ec363bebbfd98b"}]},{"sha":"c819580ce872f251e8ec23deee95d9fb15ca19c9","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T08:51:13Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:01:33Z"},"message":"Get status of Github API (#188)","tree":{"sha":"e726ab47b3248869efd35a5f989b15eece62cbe9","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e726ab47b3248869efd35a5f989b15eece62cbe9"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c819580ce872f251e8ec23deee95d9fb15ca19c9","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c819580ce872f251e8ec23deee95d9fb15ca19c9","html_url":"https://github.com/jacquev6/PyGithub/commit/c819580ce872f251e8ec23deee95d9fb15ca19c9","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c819580ce872f251e8ec23deee95d9fb15ca19c9/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"f2feb81dae1b28af80c559db7328f2d6fe017911","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2feb81dae1b28af80c559db7328f2d6fe017911","html_url":"https://github.com/jacquev6/PyGithub/commit/f2feb81dae1b28af80c559db7328f2d6fe017911"}]},{"sha":"a6597499c2f82e063074a3036d875417d5efa296","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:04:41Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:04:41Z"},"message":"Merge branch 'topic/ApiStatus' into develop","tree":{"sha":"e726ab47b3248869efd35a5f989b15eece62cbe9","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e726ab47b3248869efd35a5f989b15eece62cbe9"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/a6597499c2f82e063074a3036d875417d5efa296","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a6597499c2f82e063074a3036d875417d5efa296","html_url":"https://github.com/jacquev6/PyGithub/commit/a6597499c2f82e063074a3036d875417d5efa296","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a6597499c2f82e063074a3036d875417d5efa296/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2081675afbfed404f6a580bce0ec363bebbfd98b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2081675afbfed404f6a580bce0ec363bebbfd98b","html_url":"https://github.com/jacquev6/PyGithub/commit/2081675afbfed404f6a580bce0ec363bebbfd98b"},{"sha":"c819580ce872f251e8ec23deee95d9fb15ca19c9","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c819580ce872f251e8ec23deee95d9fb15ca19c9","html_url":"https://github.com/jacquev6/PyGithub/commit/c819580ce872f251e8ec23deee95d9fb15ca19c9"}]}],"files":[{"sha":"fa4ed127848a478d04d033a1e4dd1330c285e120","filename":".gitignore","status":"modified","additions":5,"deletions":0,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/.gitignore","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/.gitignore","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/.gitignore?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -1,6 +1,7 @@\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -28,3 +29,7 @@ GithubCredentials.py\n /PyGithub.egg-info/\n /.coverage\n /developer.github.com/\n+\n+*.cfg\n+*.bat\n+*.py~"},{"sha":"32e67f35289f9572bab58ac717f51e36a303cd9e","filename":"README.rst","status":"modified","additions":14,"deletions":22,"changes":36,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/README.rst","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/README.rst","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/README.rst?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -7,18 +7,25 @@ Should you have any question, any remark, or if you find a bug, or if there is s\n \n PyGithub is stable. I will maintain it up to date with the API, and fix bugs if any, but I don't plan new heavy developments.\n \n+\n What's new?\n ===========\n \n+Thank you, dear stargazers!\n+---------------------------\n+\n+Starting today (September 05th, 2013), we now need more than 8 bits to store the number of `stargazers `_! Thank you so much!\n \n-`Version 1.18.0 `_ (August 21st, 2013) (Bénodet edition)\n--------------------------------------------------------------------------------------------------------------------------------\n+`Version 1.19.0 `_ (September ??th, 2013) (AKFish's edition)\n+-----------------------------------------------------------------------------------------------------------------------------------\n \n-* `Issues `_' ``repository`` attribute will never be ``None``. Thank you `stuglaser `_ for the pull request\n-* No more false assumption on `rate_limiting `_, and creation of ``rate_limiting_resettime``. Thank you `edjackson `_ for the pull request\n-* `New `_ parameters ``since`` and ``until`` to ``Repository.get_commits``. Thank you `apetresc `_ for the pull request\n-* `Catch `_ Json parsing exception for some internal server errors, and throw a better exception. Thank you `MarkRoddy `_ for the pull request\n-* `Allow `_ reversed iteration of ``PaginatedList``s. Thank you `davidbrai `_ for the pull request\n+* Implement `conditional requests `_ by the method ``GithubObject.update``. Thank you very much `akfish `_ for the pull request and your collaboration!\n+* Implement persistence of PyGithub objects: ``Github.save`` and ``Github.load``. Don't forget to ``update`` your objects after loading them, it won't decrease your rate limiting quota if nothing has changed. Again, thank you `akfish `_\n+* Implement ``Github.get_repos`` to get all public repositories\n+* Implement ``NamedUser.has_in_following``\n+* Technical change: HTTP headers are now stored in retrieved objects. This is a base for new functionalities. Thank you `akfish `_ for the pull request\n+* Use the new URL to fork gists (minor change)\n+* Use the new URL to test hooks (minor change)\n \n What's missing?\n ===============\n@@ -30,10 +37,6 @@ Github API v3 URLs not (yet) covered by PyGithub\n \n * ``/applications/:client_id/tokens/:access_token`` (GET)\n * ``/feeds`` (GET)\n-* ``/gists/:id/forks`` (POST)\n-\n- * instead, ``Gist.create_fork`` calls the old URL ``/gists/:id/fork``\n-\n * ``/meta`` (GET)\n * ``/notifications`` (PUT)\n * ``/notifications/emails`` (GET)\n@@ -54,10 +57,6 @@ Github API v3 URLs not (yet) covered by PyGithub\n \n * ``/repos/:owner/:repo/contents/:path`` (DELETE)\n * ``/repos/:owner/:repo/contents/:path`` (PUT)\n-* ``/repos/:owner/:repo/hooks/:id/tests`` (POST)\n-\n- * instead, ``Hook.test`` calls the old URL ``/repos/:owner/:repo/hooks/:id/test``\n-\n * ``/repos/:owner/:repo/notifications`` (GET)\n * ``/repos/:owner/:repo/notifications`` (PUT)\n * ``/repos/:owner/:repo/stats/code_frequency`` (GET)\n@@ -68,17 +67,10 @@ Github API v3 URLs not (yet) covered by PyGithub\n * ``/repos/:owner/:repo/subscription`` (DELETE)\n * ``/repos/:owner/:repo/subscription`` (GET)\n * ``/repos/:owner/:repo/subscription`` (PUT)\n-* ``/repositories`` (GET)\n-\n- * should be called in method ``Github.get_repos``\n-\n * ``/search/code`` (GET)\n * ``/search/issues`` (GET)\n * ``/search/repositories`` (GET)\n * ``/search/users`` (GET)\n-* ``/users/:user/following/:target_user`` (GET)\n-\n- * should be called in method ``NamedUser.has_in_following``\n \n Documentation\n ============="},{"sha":"9f856df33d80af7c4699cabf13444e7c69a121da","filename":"doc/conf.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/doc/conf.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/doc/conf.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/doc/conf.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -281,6 +281,7 @@\n \t\t\"../github/MainClass.py\",\n \t\t\"../github/PaginatedList.py\",\n \t\t\"../github/Requester.py\",\n+\t\t\"../github/Consts.py\",\n \t\t\"../github/__init__.py\"]\n ]\n \n@@ -318,7 +319,7 @@\n \t\t\t\tif not isProperty:\n \t\t\t\t\tassert method is None, method + \" has no :calls: section\"\n \t\t\t\t\tmethod = line.split(\"(\")[0][8:]\n-\t\t\t\t\tif method in [\"_initAttributes\", \"_useAttributes\", \"__init__\", \"__create_pull_1\", \"__create_pull_2\", \"__create_pull\", \"_hub\", \"__get_FIX_REPO_GET_GIT_REF\", \"__set_FIX_REPO_GET_GIT_REF\", \"__get_per_page\", \"__set_per_page\"]:\n+\t\t\t\t\tif method in [\"_initAttributes\", \"_useAttributes\", \"__init__\", \"__create_pull_1\", \"__create_pull_2\", \"__create_pull\", \"_hub\", \"__get_FIX_REPO_GET_GIT_REF\", \"__set_FIX_REPO_GET_GIT_REF\", \"__get_per_page\", \"__set_per_page\", \"create_from_raw_data\", \"dump\", \"load\"]:\n \t\t\t\t\t\tmethod = None\n \t\t\t\tisProperty = False\n \t\t\tif line.startswith(\" :calls: `\"):"},{"sha":"67a289c3acb10bb39a3228b80e912fb097a0db25","filename":"github/AuthenticatedUser.py","status":"modified","additions":36,"deletions":78,"changes":114,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/AuthenticatedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/AuthenticatedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/AuthenticatedUser.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -256,8 +257,7 @@ def add_to_emails(self, *emails):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/user/emails\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n \n def add_to_following(self, following):\n@@ -269,9 +269,7 @@ def add_to_following(self, following):\n assert isinstance(following, github.NamedUser.NamedUser), following\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- \"/user/following/\" + following._identity,\n- None,\n- None\n+ \"/user/following/\" + following._identity\n )\n \n def add_to_starred(self, starred):\n@@ -283,9 +281,7 @@ def add_to_starred(self, starred):\n assert isinstance(starred, github.Repository.Repository), starred\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- \"/user/starred/\" + starred._identity,\n- None,\n- None\n+ \"/user/starred/\" + starred._identity\n )\n \n def add_to_subscriptions(self, subscription):\n@@ -297,9 +293,7 @@ def add_to_subscriptions(self, subscription):\n assert isinstance(subscription, github.Repository.Repository), subscription\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- \"/user/subscriptions/\" + subscription._identity,\n- None,\n- None\n+ \"/user/subscriptions/\" + subscription._identity\n )\n \n def add_to_watched(self, watched):\n@@ -311,9 +305,7 @@ def add_to_watched(self, watched):\n assert isinstance(watched, github.Repository.Repository), watched\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- \"/user/watched/\" + watched._identity,\n- None,\n- None\n+ \"/user/watched/\" + watched._identity\n )\n \n 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):\n@@ -345,10 +337,9 @@ def create_authorization(self, scopes=github.GithubObject.NotSet, note=github.Gi\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/authorizations\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Authorization.Authorization(self._requester, data, completed=True)\n+ return github.Authorization.Authorization(self._requester, headers, data, completed=True)\n \n def create_fork(self, repo):\n \"\"\"\n@@ -359,11 +350,9 @@ def create_fork(self, repo):\n assert isinstance(repo, github.Repository.Repository), repo\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n- \"/repos/\" + repo.owner.login + \"/\" + repo.name + \"/forks\",\n- None,\n- None\n+ \"/repos/\" + repo.owner.login + \"/\" + repo.name + \"/forks\"\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def create_gist(self, public, files, description=github.GithubObject.NotSet):\n \"\"\"\n@@ -385,10 +374,9 @@ def create_gist(self, public, files, description=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/gists\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Gist.Gist(self._requester, data, completed=True)\n+ return github.Gist.Gist(self._requester, headers, data, completed=True)\n \n def create_key(self, title, key):\n \"\"\"\n@@ -406,10 +394,9 @@ def create_key(self, title, key):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/user/keys\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.UserKey.UserKey(self._requester, data, completed=True)\n+ return github.UserKey.UserKey(self._requester, headers, data, completed=True)\n \n def create_repo(self, name, description=github.GithubObject.NotSet, homepage=github.GithubObject.NotSet, private=github.GithubObject.NotSet, has_issues=github.GithubObject.NotSet, has_wiki=github.GithubObject.NotSet, has_downloads=github.GithubObject.NotSet, auto_init=github.GithubObject.NotSet, gitignore_template=github.GithubObject.NotSet):\n \"\"\"\n@@ -456,10 +443,9 @@ def create_repo(self, name, description=github.GithubObject.NotSet, homepage=git\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/user/repos\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def edit(self, name=github.GithubObject.NotSet, email=github.GithubObject.NotSet, blog=github.GithubObject.NotSet, company=github.GithubObject.NotSet, location=github.GithubObject.NotSet, hireable=github.GithubObject.NotSet, bio=github.GithubObject.NotSet):\n \"\"\"\n@@ -498,8 +484,7 @@ def edit(self, name=github.GithubObject.NotSet, email=github.GithubObject.NotSet\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n \"/user\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -512,11 +497,9 @@ def get_authorization(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/authorizations/\" + str(id),\n- None,\n- None\n+ \"/authorizations/\" + str(id)\n )\n- return github.Authorization.Authorization(self._requester, data, completed=True)\n+ return github.Authorization.Authorization(self._requester, headers, data, completed=True)\n \n def get_authorizations(self):\n \"\"\"\n@@ -537,9 +520,7 @@ def get_emails(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/user/emails\",\n- None,\n- None\n+ \"/user/emails\"\n )\n return data\n \n@@ -676,11 +657,9 @@ def get_key(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/user/keys/\" + str(id),\n- None,\n- None\n+ \"/user/keys/\" + str(id)\n )\n- return github.UserKey.UserKey(self._requester, data, completed=True)\n+ return github.UserKey.UserKey(self._requester, headers, data, completed=True)\n \n def get_keys(self):\n \"\"\"\n@@ -703,11 +682,9 @@ def get_notification(self, id):\n assert isinstance(id, (str, unicode)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/notifications/threads/\" + id,\n- None,\n- None\n+ \"/notifications/threads/\" + id\n )\n- return github.Notification.Notification(self._requester, data, completed=True)\n+ return github.Notification.Notification(self._requester, headers, data, completed=True)\n \n def get_notifications(self, all=github.GithubObject.NotSet, participating=github.GithubObject.NotSet):\n \"\"\"\n@@ -767,11 +744,9 @@ def get_repo(self, name):\n assert isinstance(name, (str, unicode)), name\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/repos/\" + self.login + \"/\" + name,\n- None,\n- None\n+ \"/repos/\" + self.login + \"/\" + name\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def get_repos(self, type=github.GithubObject.NotSet, sort=github.GithubObject.NotSet, direction=github.GithubObject.NotSet):\n \"\"\"\n@@ -855,9 +830,7 @@ def has_in_following(self, following):\n assert isinstance(following, github.NamedUser.NamedUser), following\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- \"/user/following/\" + following._identity,\n- None,\n- None\n+ \"/user/following/\" + following._identity\n )\n return status == 204\n \n@@ -870,9 +843,7 @@ def has_in_starred(self, starred):\n assert isinstance(starred, github.Repository.Repository), starred\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- \"/user/starred/\" + starred._identity,\n- None,\n- None\n+ \"/user/starred/\" + starred._identity\n )\n return status == 204\n \n@@ -885,9 +856,7 @@ def has_in_subscriptions(self, subscription):\n assert isinstance(subscription, github.Repository.Repository), subscription\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- \"/user/subscriptions/\" + subscription._identity,\n- None,\n- None\n+ \"/user/subscriptions/\" + subscription._identity\n )\n return status == 204\n \n@@ -900,9 +869,7 @@ def has_in_watched(self, watched):\n assert isinstance(watched, github.Repository.Repository), watched\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- \"/user/watched/\" + watched._identity,\n- None,\n- None\n+ \"/user/watched/\" + watched._identity\n )\n return status == 204\n \n@@ -917,8 +884,7 @@ def remove_from_emails(self, *emails):\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n \"/user/emails\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n \n def remove_from_following(self, following):\n@@ -930,9 +896,7 @@ def remove_from_following(self, following):\n assert isinstance(following, github.NamedUser.NamedUser), following\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- \"/user/following/\" + following._identity,\n- None,\n- None\n+ \"/user/following/\" + following._identity\n )\n \n def remove_from_starred(self, starred):\n@@ -944,9 +908,7 @@ def remove_from_starred(self, starred):\n assert isinstance(starred, github.Repository.Repository), starred\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- \"/user/starred/\" + starred._identity,\n- None,\n- None\n+ \"/user/starred/\" + starred._identity\n )\n \n def remove_from_subscriptions(self, subscription):\n@@ -958,9 +920,7 @@ def remove_from_subscriptions(self, subscription):\n assert isinstance(subscription, github.Repository.Repository), subscription\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- \"/user/subscriptions/\" + subscription._identity,\n- None,\n- None\n+ \"/user/subscriptions/\" + subscription._identity\n )\n \n def remove_from_watched(self, watched):\n@@ -972,9 +932,7 @@ def remove_from_watched(self, watched):\n assert isinstance(watched, github.Repository.Repository), watched\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- \"/user/watched/\" + watched._identity,\n- None,\n- None\n+ \"/user/watched/\" + watched._identity\n )\n \n def _initAttributes(self):\n@@ -1061,7 +1019,7 @@ def _useAttributes(self, attributes):\n self._owned_private_repos = attributes[\"owned_private_repos\"]\n if \"plan\" in attributes: # pragma no branch\n assert attributes[\"plan\"] is None or isinstance(attributes[\"plan\"], dict), attributes[\"plan\"]\n- self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, attributes[\"plan\"], completed=False)\n+ self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, self._headers, attributes[\"plan\"], completed=False)\n if \"private_gists\" in attributes: # pragma no branch\n assert attributes[\"private_gists\"] is None or isinstance(attributes[\"private_gists\"], (int, long)), attributes[\"private_gists\"]\n self._private_gists = attributes[\"private_gists\"]"},{"sha":"a004fedf687cdbcd52f4ffd494b9e4536bbb037b","filename":"github/Authorization.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Authorization.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Authorization.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Authorization.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -112,9 +113,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n 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):\n@@ -146,8 +145,7 @@ def edit(self, scopes=github.GithubObject.NotSet, add_scopes=github.GithubObject\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -165,7 +163,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"app\" in attributes: # pragma no branch\n assert attributes[\"app\"] is None or isinstance(attributes[\"app\"], dict), attributes[\"app\"]\n- self._app = None if attributes[\"app\"] is None else github.AuthorizationApplication.AuthorizationApplication(self._requester, attributes[\"app\"], completed=False)\n+ self._app = None if attributes[\"app\"] is None else github.AuthorizationApplication.AuthorizationApplication(self._requester, self._headers, attributes[\"app\"], completed=False)\n if \"created_at\" in attributes: # pragma no branch\n assert attributes[\"created_at\"] is None or isinstance(attributes[\"created_at\"], (str, unicode)), attributes[\"created_at\"]\n self._created_at = self._parseDatetime(attributes[\"created_at\"])"},{"sha":"8f38bc1418f4b14e16da2ea24cd8a0fd525b872a","filename":"github/AuthorizationApplication.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/AuthorizationApplication.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/AuthorizationApplication.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/AuthorizationApplication.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"9e76182677f02c87b49e51a0139112421d53bf59","filename":"github/Branch.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Branch.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Branch.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Branch.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -55,7 +56,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"commit\" in attributes: # pragma no branch\n assert attributes[\"commit\"] is None or isinstance(attributes[\"commit\"], dict), attributes[\"commit\"]\n- self._commit = None if attributes[\"commit\"] is None else github.Commit.Commit(self._requester, attributes[\"commit\"], completed=False)\n+ self._commit = None if attributes[\"commit\"] is None else github.Commit.Commit(self._requester, self._headers, attributes[\"commit\"], completed=False)\n if \"name\" in attributes: # pragma no branch\n assert attributes[\"name\"] is None or isinstance(attributes[\"name\"], (str, unicode)), attributes[\"name\"]\n self._name = attributes[\"name\"]"},{"sha":"828da3fe18f120b030701d48a9a78be17ef143e8","filename":"github/Commit.py","status":"modified","additions":11,"deletions":12,"changes":23,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Commit.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Commit.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Commit.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -129,10 +130,9 @@ def create_comment(self, body, line=github.GithubObject.NotSet, path=github.Gith\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.CommitComment.CommitComment(self._requester, data, completed=True)\n+ return github.CommitComment.CommitComment(self._requester, headers, data, completed=True)\n \n def create_status(self, state, target_url=github.GithubObject.NotSet, description=github.GithubObject.NotSet):\n \"\"\"\n@@ -155,10 +155,9 @@ def create_status(self, state, target_url=github.GithubObject.NotSet, descriptio\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self._parentUrl(self._parentUrl(self.url)) + \"/statuses/\" + self.sha,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.CommitStatus.CommitStatus(self._requester, data, completed=True)\n+ return github.CommitStatus.CommitStatus(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -201,23 +200,23 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"author\" in attributes: # pragma no branch\n assert attributes[\"author\"] is None or isinstance(attributes[\"author\"], dict), attributes[\"author\"]\n- self._author = None if attributes[\"author\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"author\"], completed=False)\n+ self._author = None if attributes[\"author\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"author\"], completed=False)\n if \"commit\" in attributes: # pragma no branch\n assert attributes[\"commit\"] is None or isinstance(attributes[\"commit\"], dict), attributes[\"commit\"]\n- self._commit = None if attributes[\"commit\"] is None else github.GitCommit.GitCommit(self._requester, attributes[\"commit\"], completed=False)\n+ self._commit = None if attributes[\"commit\"] is None else github.GitCommit.GitCommit(self._requester, self._headers, attributes[\"commit\"], completed=False)\n if \"committer\" in attributes: # pragma no branch\n assert attributes[\"committer\"] is None or isinstance(attributes[\"committer\"], dict), attributes[\"committer\"]\n- self._committer = None if attributes[\"committer\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"committer\"], completed=False)\n+ self._committer = None if attributes[\"committer\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"committer\"], completed=False)\n if \"files\" in attributes: # pragma no branch\n assert attributes[\"files\"] is None or all(isinstance(element, dict) for element in attributes[\"files\"]), attributes[\"files\"]\n self._files = None if attributes[\"files\"] is None else [\n- github.File.File(self._requester, element, completed=False)\n+ github.File.File(self._requester, self._headers, element, completed=False)\n for element in attributes[\"files\"]\n ]\n if \"parents\" in attributes: # pragma no branch\n assert attributes[\"parents\"] is None or all(isinstance(element, dict) for element in attributes[\"parents\"]), attributes[\"parents\"]\n self._parents = None if attributes[\"parents\"] is None else [\n- Commit(self._requester, element, completed=False)\n+ Commit(self._requester, self._headers, element, completed=False)\n for element in attributes[\"parents\"]\n ]\n if \"sha\" in attributes: # pragma no branch\n@@ -225,7 +224,7 @@ def _useAttributes(self, attributes):\n self._sha = attributes[\"sha\"]\n if \"stats\" in attributes: # pragma no branch\n assert attributes[\"stats\"] is None or isinstance(attributes[\"stats\"], dict), attributes[\"stats\"]\n- self._stats = None if attributes[\"stats\"] is None else github.CommitStats.CommitStats(self._requester, attributes[\"stats\"], completed=False)\n+ self._stats = None if attributes[\"stats\"] is None else github.CommitStats.CommitStats(self._requester, self._headers, attributes[\"stats\"], completed=False)\n if \"url\" in attributes: # pragma no branch\n assert attributes[\"url\"] is None or isinstance(attributes[\"url\"], (str, unicode)), attributes[\"url\"]\n self._url = attributes[\"url\"]"},{"sha":"c2c897d13f4092571b2a71f83694e34ff26c560d","filename":"github/CommitComment.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/CommitComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/CommitComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/CommitComment.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -128,9 +129,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, body):\n@@ -146,8 +145,7 @@ def edit(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -197,4 +195,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"49f407783d025f012358c435ec1153d293856bef","filename":"github/CommitStats.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/CommitStats.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/CommitStats.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/CommitStats.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"d08e0274279824208d98b1dd4033f18b970f594a","filename":"github/CommitStatus.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/CommitStatus.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/CommitStatus.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/CommitStatus.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -97,7 +98,7 @@ def _useAttributes(self, attributes):\n self._created_at = self._parseDatetime(attributes[\"created_at\"])\n if \"creator\" in attributes: # pragma no branch\n assert attributes[\"creator\"] is None or isinstance(attributes[\"creator\"], dict), attributes[\"creator\"]\n- self._creator = None if attributes[\"creator\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"creator\"], completed=False)\n+ self._creator = None if attributes[\"creator\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"creator\"], completed=False)\n if \"description\" in attributes: # pragma no branch\n assert attributes[\"description\"] is None or isinstance(attributes[\"description\"], (str, unicode)), attributes[\"description\"]\n self._description = attributes[\"description\"]"},{"sha":"f5f66bc1f4bcb57c9286fb674e4bfdbaaf47538f","filename":"github/Comparison.py","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Comparison.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Comparison.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Comparison.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -150,14 +151,14 @@ def _useAttributes(self, attributes):\n self._ahead_by = attributes[\"ahead_by\"]\n if \"base_commit\" in attributes: # pragma no branch\n assert attributes[\"base_commit\"] is None or isinstance(attributes[\"base_commit\"], dict), attributes[\"base_commit\"]\n- self._base_commit = None if attributes[\"base_commit\"] is None else github.Commit.Commit(self._requester, attributes[\"base_commit\"], completed=False)\n+ self._base_commit = None if attributes[\"base_commit\"] is None else github.Commit.Commit(self._requester, self._headers, attributes[\"base_commit\"], completed=False)\n if \"behind_by\" in attributes: # pragma no branch\n assert attributes[\"behind_by\"] is None or isinstance(attributes[\"behind_by\"], (int, long)), attributes[\"behind_by\"]\n self._behind_by = attributes[\"behind_by\"]\n if \"commits\" in attributes: # pragma no branch\n assert attributes[\"commits\"] is None or all(isinstance(element, dict) for element in attributes[\"commits\"]), attributes[\"commits\"]\n self._commits = None if attributes[\"commits\"] is None else [\n- github.Commit.Commit(self._requester, element, completed=False)\n+ github.Commit.Commit(self._requester, self._headers, element, completed=False)\n for element in attributes[\"commits\"]\n ]\n if \"diff_url\" in attributes: # pragma no branch\n@@ -166,7 +167,7 @@ def _useAttributes(self, attributes):\n if \"files\" in attributes: # pragma no branch\n assert attributes[\"files\"] is None or all(isinstance(element, dict) for element in attributes[\"files\"]), attributes[\"files\"]\n self._files = None if attributes[\"files\"] is None else [\n- github.File.File(self._requester, element, completed=False)\n+ github.File.File(self._requester, self._headers, element, completed=False)\n for element in attributes[\"files\"]\n ]\n if \"html_url\" in attributes: # pragma no branch"},{"sha":"b3b4791408f3b48375ba7360ef7aa129c592bd24","filename":"github/Consts.py","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Consts.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Consts.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Consts.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,43 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 AKFish #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+# #193: Line endings should be linux style\n+\n+# TODO: As of Thu Aug 21 22:40:13 (BJT) Chinese Standard Time 2013\n+# lots of consts in this project are explict\n+# should realy round them up and reference them by consts\n+# EDIT: well, maybe :-)\n+\n+################################################################################\n+# Request Header #\n+# (Case sensitive) #\n+################################################################################\n+REQ_IF_NONE_MATCH = \"If-None-Match\"\n+REQ_IF_MODIFIED_SINCE = \"If-Modified-Since\"\n+\n+################################################################################\n+# Response Header #\n+# (Lower Case) #\n+################################################################################\n+RES_ETAG = \"etag\"\n+RES_LAST_MODIFED = \"last-modified\""},{"sha":"03818842545b0c6824e8ab4f1e5b1c87462cba6a","filename":"github/ContentFile.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/ContentFile.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/ContentFile.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/ContentFile.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"2cd057cac916898be1451aac7b4f94830a880937","filename":"github/Download.py","status":"modified","additions":2,"deletions":3,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Download.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Download.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Download.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -198,9 +199,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def _initAttributes(self):"},{"sha":"203510252bb0e76c540d3bc20630e75ef99ecb31","filename":"github/Event.py","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Event.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Event.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Event.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -105,7 +106,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"actor\" in attributes: # pragma no branch\n assert attributes[\"actor\"] is None or isinstance(attributes[\"actor\"], dict), attributes[\"actor\"]\n- self._actor = None if attributes[\"actor\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"actor\"], completed=False)\n+ self._actor = None if attributes[\"actor\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"actor\"], completed=False)\n if \"created_at\" in attributes: # pragma no branch\n assert attributes[\"created_at\"] is None or isinstance(attributes[\"created_at\"], (str, unicode)), attributes[\"created_at\"]\n self._created_at = self._parseDatetime(attributes[\"created_at\"])\n@@ -114,7 +115,7 @@ def _useAttributes(self, attributes):\n self._id = attributes[\"id\"]\n if \"org\" in attributes: # pragma no branch\n assert attributes[\"org\"] is None or isinstance(attributes[\"org\"], dict), attributes[\"org\"]\n- self._org = None if attributes[\"org\"] is None else github.Organization.Organization(self._requester, attributes[\"org\"], completed=False)\n+ self._org = None if attributes[\"org\"] is None else github.Organization.Organization(self._requester, self._headers, attributes[\"org\"], completed=False)\n if \"payload\" in attributes: # pragma no branch\n assert attributes[\"payload\"] is None or isinstance(attributes[\"payload\"], dict), attributes[\"payload\"]\n self._payload = attributes[\"payload\"]\n@@ -123,7 +124,7 @@ def _useAttributes(self, attributes):\n self._public = attributes[\"public\"]\n if \"repo\" in attributes: # pragma no branch\n assert attributes[\"repo\"] is None or isinstance(attributes[\"repo\"], dict), attributes[\"repo\"]\n- self._repo = None if attributes[\"repo\"] is None else github.Repository.Repository(self._requester, attributes[\"repo\"], completed=False)\n+ self._repo = None if attributes[\"repo\"] is None else github.Repository.Repository(self._requester, self._headers, attributes[\"repo\"], completed=False)\n if \"type\" in attributes: # pragma no branch\n assert attributes[\"type\"] is None or isinstance(attributes[\"type\"], (str, unicode)), attributes[\"type\"]\n self._type = attributes[\"type\"]"},{"sha":"6adaae8a974440b489b2913d515a32488f8c252f","filename":"github/File.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/File.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/File.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/File.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"65de668ed8da2c379cc88c0515024aa3d4c7164e","filename":"github/Gist.py","status":"modified","additions":17,"deletions":30,"changes":47,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Gist.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Gist.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Gist.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -171,23 +172,20 @@ def create_comment(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GistComment.GistComment(self._requester, data, completed=True)\n+ return github.GistComment.GistComment(self._requester, headers, data, completed=True)\n \n def create_fork(self):\n \"\"\"\n- :calls: `POST /gists/:id/fork `_\n+ :calls: `POST /gists/:id/forks `_\n :rtype: :class:`github.Gist.Gist`\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n- self.url + \"/fork\",\n- None,\n- None\n+ self.url + \"/forks\"\n )\n- return Gist(self._requester, data, completed=True)\n+ return Gist(self._requester, headers, data, completed=True)\n \n def delete(self):\n \"\"\"\n@@ -196,9 +194,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, description=github.GithubObject.NotSet, files=github.GithubObject.NotSet):\n@@ -218,8 +214,7 @@ def edit(self, description=github.GithubObject.NotSet, files=github.GithubObject\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -232,11 +227,9 @@ def get_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/comments/\" + str(id),\n- None,\n- None\n+ self.url + \"/comments/\" + str(id)\n )\n- return github.GistComment.GistComment(self._requester, data, completed=True)\n+ return github.GistComment.GistComment(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -257,9 +250,7 @@ def is_starred(self):\n \"\"\"\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/star\",\n- None,\n- None\n+ self.url + \"/star\"\n )\n return status == 204\n \n@@ -270,9 +261,7 @@ def reset_starred(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/star\",\n- None,\n- None\n+ self.url + \"/star\"\n )\n \n def set_starred(self):\n@@ -282,9 +271,7 @@ def set_starred(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/star\",\n- None,\n- None\n+ self.url + \"/star\"\n )\n \n def _initAttributes(self):\n@@ -317,12 +304,12 @@ def _useAttributes(self, attributes):\n if \"files\" in attributes: # pragma no branch\n assert attributes[\"files\"] is None or all(isinstance(element, dict) for element in attributes[\"files\"].itervalues()), attributes[\"files\"]\n self._files = None if attributes[\"files\"] is None else dict(\n- (key, github.GistFile.GistFile(self._requester, element, completed=False))\n+ (key, github.GistFile.GistFile(self._requester, self._headers, element, completed=False))\n for key, element in attributes[\"files\"].iteritems()\n )\n if \"fork_of\" in attributes: # pragma no branch\n assert attributes[\"fork_of\"] is None or isinstance(attributes[\"fork_of\"], dict), attributes[\"fork_of\"]\n- self._fork_of = None if attributes[\"fork_of\"] is None else Gist(self._requester, attributes[\"fork_of\"], completed=False)\n+ self._fork_of = None if attributes[\"fork_of\"] is None else Gist(self._requester, self._headers, attributes[\"fork_of\"], completed=False)\n if \"forks\" in attributes: # pragma no branch\n assert attributes[\"forks\"] is None or all(isinstance(element, dict) for element in attributes[\"forks\"]), attributes[\"forks\"]\n self._forks = None if attributes[\"forks\"] is None else [\n@@ -338,7 +325,7 @@ def _useAttributes(self, attributes):\n if \"history\" in attributes: # pragma no branch\n assert attributes[\"history\"] is None or all(isinstance(element, dict) for element in attributes[\"history\"]), attributes[\"history\"]\n self._history = None if attributes[\"history\"] is None else [\n- github.GistHistoryState.GistHistoryState(self._requester, element, completed=False)\n+ github.GistHistoryState.GistHistoryState(self._requester, self._headers, element, completed=False)\n for element in attributes[\"history\"]\n ]\n if \"html_url\" in attributes: # pragma no branch\n@@ -358,4 +345,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"5ee0664c5827eccb2cce3e514d907f70daa7e09c","filename":"github/GistComment.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GistComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GistComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GistComment.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -88,9 +89,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, body):\n@@ -106,8 +105,7 @@ def edit(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -137,4 +135,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"96c8ee2741d3fe8fbb40d12541f9e4a94839fdf3","filename":"github/GistFile.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GistFile.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GistFile.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GistFile.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"bc24d5c0700d0bf95d76e8cc1b20cdbbdfeb80a7","filename":"github/GistHistoryState.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GistHistoryState.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GistHistoryState.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GistHistoryState.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -84,7 +85,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"change_status\" in attributes: # pragma no branch\n assert attributes[\"change_status\"] is None or isinstance(attributes[\"change_status\"], dict), attributes[\"change_status\"]\n- self._change_status = None if attributes[\"change_status\"] is None else github.CommitStats.CommitStats(self._requester, attributes[\"change_status\"], completed=False)\n+ self._change_status = None if attributes[\"change_status\"] is None else github.CommitStats.CommitStats(self._requester, self._headers, attributes[\"change_status\"], completed=False)\n if \"committed_at\" in attributes: # pragma no branch\n assert attributes[\"committed_at\"] is None or isinstance(attributes[\"committed_at\"], (str, unicode)), attributes[\"committed_at\"]\n self._committed_at = self._parseDatetime(attributes[\"committed_at\"])\n@@ -93,7 +94,7 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)\n if \"version\" in attributes: # pragma no branch\n assert attributes[\"version\"] is None or isinstance(attributes[\"version\"], (str, unicode)), attributes[\"version\"]\n self._version = attributes[\"version\"]"},{"sha":"e56ce94d55e53cc74e259293b1a2c91d22f8b40c","filename":"github/GitAuthor.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitAuthor.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitAuthor.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitAuthor.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"8f1056829fa56386223cb843005d6777ac71d32e","filename":"github/GitBlob.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitBlob.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitBlob.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitBlob.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"ffdc6d5a739ed5dd4f701cd2c345108ceb5499c2","filename":"github/GitCommit.py","status":"modified","additions":5,"deletions":4,"changes":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitCommit.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitCommit.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitCommit.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -106,17 +107,17 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"author\" in attributes: # pragma no branch\n assert attributes[\"author\"] is None or isinstance(attributes[\"author\"], dict), attributes[\"author\"]\n- self._author = None if attributes[\"author\"] is None else github.GitAuthor.GitAuthor(self._requester, attributes[\"author\"], completed=False)\n+ self._author = None if attributes[\"author\"] is None else github.GitAuthor.GitAuthor(self._requester, self._headers, attributes[\"author\"], completed=False)\n if \"committer\" in attributes: # pragma no branch\n assert attributes[\"committer\"] is None or isinstance(attributes[\"committer\"], dict), attributes[\"committer\"]\n- self._committer = None if attributes[\"committer\"] is None else github.GitAuthor.GitAuthor(self._requester, attributes[\"committer\"], completed=False)\n+ self._committer = None if attributes[\"committer\"] is None else github.GitAuthor.GitAuthor(self._requester, self._headers, attributes[\"committer\"], completed=False)\n if \"message\" in attributes: # pragma no branch\n assert attributes[\"message\"] is None or isinstance(attributes[\"message\"], (str, unicode)), attributes[\"message\"]\n self._message = attributes[\"message\"]\n if \"parents\" in attributes: # pragma no branch\n assert attributes[\"parents\"] is None or all(isinstance(element, dict) for element in attributes[\"parents\"]), attributes[\"parents\"]\n self._parents = None if attributes[\"parents\"] is None else [\n- GitCommit(self._requester, element, completed=False)\n+ GitCommit(self._requester, self._headers, element, completed=False)\n for element in attributes[\"parents\"]\n ]\n if \"sha\" in attributes: # pragma no branch\n@@ -124,7 +125,7 @@ def _useAttributes(self, attributes):\n self._sha = attributes[\"sha\"]\n if \"tree\" in attributes: # pragma no branch\n assert attributes[\"tree\"] is None or isinstance(attributes[\"tree\"], dict), attributes[\"tree\"]\n- self._tree = None if attributes[\"tree\"] is None else github.GitTree.GitTree(self._requester, attributes[\"tree\"], completed=False)\n+ self._tree = None if attributes[\"tree\"] is None else github.GitTree.GitTree(self._requester, self._headers, attributes[\"tree\"], completed=False)\n if \"url\" in attributes: # pragma no branch\n assert attributes[\"url\"] is None or isinstance(attributes[\"url\"], (str, unicode)), attributes[\"url\"]\n self._url = attributes[\"url\"]"},{"sha":"a731464122384af8435525853343bce170cb5cd6","filename":"github/GitObject.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitObject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitObject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitObject.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"97a2ca4d6e900f32d7910ef657afc40d4b91a539","filename":"github/GitRef.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitRef.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitRef.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitRef.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -64,9 +65,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, sha, force=github.GithubObject.NotSet):\n@@ -86,8 +85,7 @@ def edit(self, sha, force=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -99,7 +97,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"object\" in attributes: # pragma no branch\n assert attributes[\"object\"] is None or isinstance(attributes[\"object\"], dict), attributes[\"object\"]\n- self._object = None if attributes[\"object\"] is None else github.GitObject.GitObject(self._requester, attributes[\"object\"], completed=False)\n+ self._object = None if attributes[\"object\"] is None else github.GitObject.GitObject(self._requester, self._headers, attributes[\"object\"], completed=False)\n if \"ref\" in attributes: # pragma no branch\n assert attributes[\"ref\"] is None or isinstance(attributes[\"ref\"], (str, unicode)), attributes[\"ref\"]\n self._ref = attributes[\"ref\"]"},{"sha":"564b6b86fa11f943796a0630afd00e17f7fee1ce","filename":"github/GitTag.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitTag.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitTag.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitTag.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -96,7 +97,7 @@ def _useAttributes(self, attributes):\n self._message = attributes[\"message\"]\n if \"object\" in attributes: # pragma no branch\n assert attributes[\"object\"] is None or isinstance(attributes[\"object\"], dict), attributes[\"object\"]\n- self._object = None if attributes[\"object\"] is None else github.GitObject.GitObject(self._requester, attributes[\"object\"], completed=False)\n+ self._object = None if attributes[\"object\"] is None else github.GitObject.GitObject(self._requester, self._headers, attributes[\"object\"], completed=False)\n if \"sha\" in attributes: # pragma no branch\n assert attributes[\"sha\"] is None or isinstance(attributes[\"sha\"], (str, unicode)), attributes[\"sha\"]\n self._sha = attributes[\"sha\"]\n@@ -105,7 +106,7 @@ def _useAttributes(self, attributes):\n self._tag = attributes[\"tag\"]\n if \"tagger\" in attributes: # pragma no branch\n assert attributes[\"tagger\"] is None or isinstance(attributes[\"tagger\"], dict), attributes[\"tagger\"]\n- self._tagger = None if attributes[\"tagger\"] is None else github.GitAuthor.GitAuthor(self._requester, attributes[\"tagger\"], completed=False)\n+ self._tagger = None if attributes[\"tagger\"] is None else github.GitAuthor.GitAuthor(self._requester, self._headers, attributes[\"tagger\"], completed=False)\n if \"url\" in attributes: # pragma no branch\n assert attributes[\"url\"] is None or isinstance(attributes[\"url\"], (str, unicode)), attributes[\"url\"]\n self._url = attributes[\"url\"]"},{"sha":"b06c5e82369ae5ba3a50d0edc483e3b22c207aad","filename":"github/GitTree.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitTree.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitTree.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitTree.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -73,7 +74,7 @@ def _useAttributes(self, attributes):\n if \"tree\" in attributes: # pragma no branch\n assert attributes[\"tree\"] is None or all(isinstance(element, dict) for element in attributes[\"tree\"]), attributes[\"tree\"]\n self._tree = None if attributes[\"tree\"] is None else [\n- github.GitTreeElement.GitTreeElement(self._requester, element, completed=False)\n+ github.GitTreeElement.GitTreeElement(self._requester, self._headers, element, completed=False)\n for element in attributes[\"tree\"]\n ]\n if \"url\" in attributes: # pragma no branch"},{"sha":"e7ae76bbcb10fa76c9b0b3316550045a03f5f81b","filename":"github/GitTreeElement.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitTreeElement.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitTreeElement.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitTreeElement.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"02e7a75e28a911a1bf691663d2e2b3a6bde84768","filename":"github/GithubException.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GithubException.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GithubException.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GithubException.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"91c079b70a8508a3ab3f7f740f51bdda35cf87ea","filename":"github/GithubObject.py","status":"modified","additions":74,"deletions":10,"changes":84,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GithubObject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GithubObject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GithubObject.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -26,6 +27,7 @@\n import datetime\n \n import GithubException\n+import Consts\n \n \n class _NotSetType:\n@@ -38,14 +40,32 @@ class GithubObject(object):\n \"\"\"\n Base class for all classes representing objects returned by the API.\n \"\"\"\n- def __init__(self, requester, attributes, completed):\n+\n+ '''\n+ A global debug flag to enable header validation by requester for all objects\n+ '''\n+ CHECK_AFTER_INIT_FLAG = False\n+\n+ @classmethod\n+ def setCheckAfterInitFlag(cls, flag):\n+ cls.CHECK_AFTER_INIT_FLAG = flag\n+\n+ def __init__(self, requester, headers, attributes, completed):\n self._requester = requester\n self._initAttributes()\n- self._storeAndUseAttributes(attributes)\n+ self._storeAndUseAttributes(headers, attributes)\n \n- def _storeAndUseAttributes(self, attributes):\n- self._useAttributes(attributes)\n+ # Ask requester to do some checking, for debug and test purpose\n+ # Since it's most handy to access and kinda all-knowing\n+ if self.CHECK_AFTER_INIT_FLAG: # pragma no branch (Flag always set in tests)\n+ requester.check_me(self)\n+\n+ def _storeAndUseAttributes(self, headers, attributes):\n+ # Make sure headers are assigned before calling _useAttributes\n+ # (Some derived classes will use headers in _useAttributes)\n+ self._headers = headers\n self._rawData = attributes\n+ self._useAttributes(attributes)\n \n @property\n def raw_data(self):\n@@ -55,6 +75,14 @@ def raw_data(self):\n self._completeIfNeeded()\n return self._rawData\n \n+ @property\n+ def raw_headers(self):\n+ \"\"\"\n+ :type: dict\n+ \"\"\"\n+ self._completeIfNeeded()\n+ return self._headers\n+\n @staticmethod\n def _parentUrl(url):\n return \"/\".join(url.split(\"/\")[: -1])\n@@ -77,6 +105,20 @@ def _parseDatetime(s):\n else:\n return datetime.datetime.strptime(s, \"%Y-%m-%dT%H:%M:%SZ\")\n \n+ @property\n+ def etag(self):\n+ '''\n+ :type str\n+ '''\n+ return self._headers.get(Consts.RES_ETAG)\n+\n+ @property\n+ def last_modified(self):\n+ '''\n+ :type str\n+ '''\n+ return self._headers.get(Consts.RES_LAST_MODIFED)\n+\n \n class NonCompletableGithubObject(GithubObject):\n def _completeIfNeeded(self):\n@@ -84,8 +126,8 @@ def _completeIfNeeded(self):\n \n \n class CompletableGithubObject(GithubObject):\n- def __init__(self, requester, attributes, completed):\n- GithubObject.__init__(self, requester, attributes, completed)\n+ def __init__(self, requester, headers, attributes, completed):\n+ GithubObject.__init__(self, requester, headers, attributes, completed)\n self.__completed = completed\n \n def _completeIfNotSet(self, value):\n@@ -99,9 +141,31 @@ def _completeIfNeeded(self):\n def __complete(self):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self._url,\n- None,\n- None\n+ self._url\n )\n- self._storeAndUseAttributes(data)\n+ self._storeAndUseAttributes(headers, data)\n self.__completed = True\n+\n+ def update(self):\n+ '''\n+ Check and update the object with conditional request\n+ :rtype: Boolean value indicating whether the object is changed\n+ '''\n+ conditionalRequestHeader = dict()\n+ if self.etag is not None:\n+ conditionalRequestHeader[Consts.REQ_IF_NONE_MATCH] = self.etag\n+ if self.last_modified is not None:\n+ conditionalRequestHeader[Consts.REQ_IF_MODIFIED_SINCE] = self.last_modified\n+\n+ status, responseHeaders, output = self._requester.requestJson(\n+ \"GET\",\n+ self._url,\n+ headers=conditionalRequestHeader\n+ )\n+ if status == 304:\n+ return False\n+ else:\n+ headers, data = self._requester._Requester__check(status, responseHeaders, output)\n+ self._storeAndUseAttributes(headers, data)\n+ self.__completed = True\n+ return True"},{"sha":"a8a7022f4602f37b2583f890e324b204cdc89a62","filename":"github/GitignoreTemplate.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitignoreTemplate.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitignoreTemplate.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitignoreTemplate.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -3,6 +3,7 @@\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"447a0e9a7afa1e845dea9dc82f8c114251ea61bc","filename":"github/Hook.py","status":"modified","additions":7,"deletions":11,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Hook.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Hook.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Hook.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -30,7 +31,7 @@\n \n class Hook(github.GithubObject.CompletableGithubObject):\n \"\"\"\n- This class represents Hooks as returned for example by http://developer.github.com/v3/todo\n+ This class represents Hooks as returned for example by http://developer.github.com/v3/repos/hooks\n \"\"\"\n \n @property\n@@ -112,9 +113,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, name, config, events=github.GithubObject.NotSet, add_events=github.GithubObject.NotSet, remove_events=github.GithubObject.NotSet, active=github.GithubObject.NotSet):\n@@ -149,21 +148,18 @@ def edit(self, name, config, events=github.GithubObject.NotSet, add_events=githu\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n def test(self):\n \"\"\"\n- :calls: `POST /repos/:owner/:repo/hooks/:id/test `_\n+ :calls: `POST /repos/:owner/:repo/hooks/:id/tests `_\n :rtype: None\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n- self.url + \"/test\",\n- None,\n- None\n+ self.url + \"/tests\"\n )\n \n def _initAttributes(self):\n@@ -195,7 +191,7 @@ def _useAttributes(self, attributes):\n self._id = attributes[\"id\"]\n if \"last_response\" in attributes: # pragma no branch\n assert attributes[\"last_response\"] is None or isinstance(attributes[\"last_response\"], dict), attributes[\"last_response\"]\n- self._last_response = None if attributes[\"last_response\"] is None else github.HookResponse.HookResponse(self._requester, attributes[\"last_response\"], completed=False)\n+ self._last_response = None if attributes[\"last_response\"] is None else github.HookResponse.HookResponse(self._requester, self._headers, attributes[\"last_response\"], completed=False)\n if \"name\" in attributes: # pragma no branch\n assert attributes[\"name\"] is None or isinstance(attributes[\"name\"], (str, unicode)), attributes[\"name\"]\n self._name = attributes[\"name\"]"},{"sha":"5653492bbd94babe3e1039d8c30eda3dde4349bb","filename":"github/HookDescription.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/HookDescription.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/HookDescription.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/HookDescription.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"41e242b3abfb1ac7e961ee5a524cdb0455d5b253","filename":"github/HookResponse.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/HookResponse.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/HookResponse.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/HookResponse.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"b849e8d459dc6ecbb28278d17680d175a30ba391","filename":"github/Issue.py","status":"modified","additions":18,"deletions":27,"changes":45,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Issue.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Issue.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Issue.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -6,6 +6,7 @@\n # Copyright 2012 Philip Kimmey #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Stuart Glaser #\n # Copyright 2013 Vincent Jacques #\n # #\n@@ -148,7 +149,7 @@ def repository(self):\n if self._repository is github.GithubObject.NotSet:\n # The repository was not set automatically, so it must be looked up by url.\n repo_url = \"/\".join(self.url.split(\"/\")[:-2])\n- self._repository = github.Repository.Repository(self._requester, {'url': repo_url}, False)\n+ self._repository = github.Repository.Repository(self._requester, self._headers, {'url': repo_url}, completed=False)\n return self._repository\n \n @property\n@@ -202,8 +203,7 @@ def add_to_labels(self, *labels):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/labels\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n \n def create_comment(self, body):\n@@ -219,10 +219,9 @@ def create_comment(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.IssueComment.IssueComment(self._requester, data, completed=True)\n+ return github.IssueComment.IssueComment(self._requester, headers, data, completed=True)\n \n def delete_labels(self):\n \"\"\"\n@@ -231,9 +230,7 @@ def delete_labels(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/labels\",\n- None,\n- None\n+ self.url + \"/labels\"\n )\n \n 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):\n@@ -269,8 +266,7 @@ def edit(self, title=github.GithubObject.NotSet, body=github.GithubObject.NotSet\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -283,11 +279,9 @@ def get_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self._parentUrl(self.url) + \"/comments/\" + str(id),\n- None,\n- None\n+ self._parentUrl(self.url) + \"/comments/\" + str(id)\n )\n- return github.IssueComment.IssueComment(self._requester, data, completed=True)\n+ return github.IssueComment.IssueComment(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -334,9 +328,7 @@ def remove_from_labels(self, label):\n assert isinstance(label, github.Label.Label), label\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/labels/\" + label._identity,\n- None,\n- None\n+ self.url + \"/labels/\" + label._identity\n )\n \n def set_labels(self, *labels):\n@@ -350,8 +342,7 @@ def set_labels(self, *labels):\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n self.url + \"/labels\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n \n @property\n@@ -381,7 +372,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"assignee\" in attributes: # pragma no branch\n assert attributes[\"assignee\"] is None or isinstance(attributes[\"assignee\"], dict), attributes[\"assignee\"]\n- self._assignee = None if attributes[\"assignee\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"assignee\"], completed=False)\n+ self._assignee = None if attributes[\"assignee\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"assignee\"], completed=False)\n if \"body\" in attributes: # pragma no branch\n assert attributes[\"body\"] is None or isinstance(attributes[\"body\"], (str, unicode)), attributes[\"body\"]\n self._body = attributes[\"body\"]\n@@ -390,7 +381,7 @@ def _useAttributes(self, attributes):\n self._closed_at = self._parseDatetime(attributes[\"closed_at\"])\n if \"closed_by\" in attributes: # pragma no branch\n assert attributes[\"closed_by\"] is None or isinstance(attributes[\"closed_by\"], dict), attributes[\"closed_by\"]\n- self._closed_by = None if attributes[\"closed_by\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"closed_by\"], completed=False)\n+ self._closed_by = None if attributes[\"closed_by\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"closed_by\"], completed=False)\n if \"comments\" in attributes: # pragma no branch\n assert attributes[\"comments\"] is None or isinstance(attributes[\"comments\"], (int, long)), attributes[\"comments\"]\n self._comments = attributes[\"comments\"]\n@@ -406,21 +397,21 @@ def _useAttributes(self, attributes):\n if \"labels\" in attributes: # pragma no branch\n assert attributes[\"labels\"] is None or all(isinstance(element, dict) for element in attributes[\"labels\"]), attributes[\"labels\"]\n self._labels = None if attributes[\"labels\"] is None else [\n- github.Label.Label(self._requester, element, completed=False)\n+ github.Label.Label(self._requester, self._headers, element, completed=False)\n for element in attributes[\"labels\"]\n ]\n if \"milestone\" in attributes: # pragma no branch\n assert attributes[\"milestone\"] is None or isinstance(attributes[\"milestone\"], dict), attributes[\"milestone\"]\n- self._milestone = None if attributes[\"milestone\"] is None else github.Milestone.Milestone(self._requester, attributes[\"milestone\"], completed=False)\n+ self._milestone = None if attributes[\"milestone\"] is None else github.Milestone.Milestone(self._requester, self._headers, attributes[\"milestone\"], completed=False)\n if \"number\" in attributes: # pragma no branch\n assert attributes[\"number\"] is None or isinstance(attributes[\"number\"], (int, long)), attributes[\"number\"]\n self._number = attributes[\"number\"]\n if \"pull_request\" in attributes: # pragma no branch\n assert attributes[\"pull_request\"] is None or isinstance(attributes[\"pull_request\"], dict), attributes[\"pull_request\"]\n- self._pull_request = None if attributes[\"pull_request\"] is None else github.IssuePullRequest.IssuePullRequest(self._requester, attributes[\"pull_request\"], completed=False)\n+ self._pull_request = None if attributes[\"pull_request\"] is None else github.IssuePullRequest.IssuePullRequest(self._requester, self._headers, attributes[\"pull_request\"], completed=False)\n if \"repository\" in attributes: # pragma no branch\n assert attributes[\"repository\"] is None or isinstance(attributes[\"repository\"], dict), attributes[\"repository\"]\n- self._repository = None if attributes[\"repository\"] is None else github.Repository.Repository(self._requester, attributes[\"repository\"], completed=False)\n+ self._repository = None if attributes[\"repository\"] is None else github.Repository.Repository(self._requester, self._headers, attributes[\"repository\"], completed=False)\n if \"state\" in attributes: # pragma no branch\n assert attributes[\"state\"] is None or isinstance(attributes[\"state\"], (str, unicode)), attributes[\"state\"]\n self._state = attributes[\"state\"]\n@@ -435,4 +426,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"149a6f6f1eafaf177dd951aa211f659a6975d72f","filename":"github/IssueComment.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/IssueComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/IssueComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/IssueComment.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Michael Stead #\n # Copyright 2013 Vincent Jacques #\n # #\n@@ -97,9 +98,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, body):\n@@ -115,8 +114,7 @@ def edit(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -150,4 +148,4 @@ def _useAttributes(self, attributes):\n self._html_url = attributes[\"html_url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"aca4cdf8a90313170980f3b75d11de61c6e3d202","filename":"github/IssueEvent.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/IssueEvent.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/IssueEvent.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/IssueEvent.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -102,7 +103,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"actor\" in attributes: # pragma no branch\n assert attributes[\"actor\"] is None or isinstance(attributes[\"actor\"], dict), attributes[\"actor\"]\n- self._actor = None if attributes[\"actor\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"actor\"], completed=False)\n+ self._actor = None if attributes[\"actor\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"actor\"], completed=False)\n if \"commit_id\" in attributes: # pragma no branch\n assert attributes[\"commit_id\"] is None or isinstance(attributes[\"commit_id\"], (str, unicode)), attributes[\"commit_id\"]\n self._commit_id = attributes[\"commit_id\"]\n@@ -117,7 +118,7 @@ def _useAttributes(self, attributes):\n self._id = attributes[\"id\"]\n if \"issue\" in attributes: # pragma no branch\n assert attributes[\"issue\"] is None or isinstance(attributes[\"issue\"], dict), attributes[\"issue\"]\n- self._issue = None if attributes[\"issue\"] is None else github.Issue.Issue(self._requester, attributes[\"issue\"], completed=False)\n+ self._issue = None if attributes[\"issue\"] is None else github.Issue.Issue(self._requester, self._headers, attributes[\"issue\"], completed=False)\n if \"url\" in attributes: # pragma no branch\n assert attributes[\"url\"] is None or isinstance(attributes[\"url\"], (str, unicode)), attributes[\"url\"]\n self._url = attributes[\"url\"]"},{"sha":"ae7e6b6c203695bc39cd5d057f80df638f8e8ccb","filename":"github/IssuePullRequest.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/IssuePullRequest.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/IssuePullRequest.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/IssuePullRequest.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"813cd5f015c056fdd9e1b0e2e4dc0d9265b5f238","filename":"github/Label.py","status":"modified","additions":3,"deletions":5,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Label.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Label.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Label.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -65,9 +66,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, name, color):\n@@ -86,8 +85,7 @@ def edit(self, name, color):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n "},{"sha":"cfe48d679963a0e10f861b76fa9a80cfd2ad85cc","filename":"github/Legacy.py","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Legacy.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Legacy.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Legacy.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -57,12 +58,12 @@ def get_page(self, page):\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n self.__url,\n- args,\n- None\n+ parameters=args\n )\n self.__continue = len(data[self.__key]) > 0\n+\n return [\n- self.__contentClass(self.__requester, self.__convert(element), completed=False)\n+ self.__contentClass(self.__requester, headers, self.__convert(element), completed=False)\n for element in data[self.__key]\n ]\n "},{"sha":"a4af1a618da0a5d865eb1675fd96a085bb0ab680","filename":"github/MainClass.py","status":"modified","additions":113,"deletions":44,"changes":157,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/MainClass.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/MainClass.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/MainClass.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,6 +2,7 @@\n \n ############################ Copyrights and license ############################\n # #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Ed Jackson #\n # Copyright 2013 Jonathan J Hunt #\n # Copyright 2013 Peter Golm #\n@@ -25,6 +26,7 @@\n ################################################################################\n \n import urllib\n+import pickle\n \n from Requester import Requester\n import AuthenticatedUser\n@@ -38,6 +40,8 @@\n import HookDescription\n import GitignoreTemplate\n import Notification\n+import Status\n+import StatusMessage\n \n \n DEFAULT_BASE_URL = \"https://api.github.com\"\n@@ -91,8 +95,12 @@ def __get_per_page(self):\n def __set_per_page(self, value):\n self.__requester.per_page = value\n \n+ # v2: Remove this property? Why should it be necessary to read/modify it after construction\n per_page = property(__get_per_page, __set_per_page)\n \n+ # v2: Provide a unified way to access values of headers of last response\n+ # v2: (and add/keep ad hoc properties for specific useful headers like rate limiting, oauth scopes, etc.)\n+ # v2: Return an instance of a class: using a tuple did not allow to add a field \"resettime\"\n @property\n def rate_limiting(self):\n \"\"\"\n@@ -103,9 +111,7 @@ def rate_limiting(self):\n if limit < 0:\n self.__requester.requestJsonAndCheck(\n 'GET',\n- '/rate_limit',\n- None,\n- None\n+ '/rate_limit'\n )\n return self.__requester.rate_limiting\n \n@@ -118,9 +124,7 @@ def rate_limiting_resettime(self):\n if self.__requester.rate_limiting_resettime == 0:\n self.__requester.requestJsonAndCheck(\n 'GET',\n- '/rate_limit',\n- None,\n- None\n+ '/rate_limit'\n )\n return self.__requester.rate_limiting_resettime\n \n@@ -139,15 +143,13 @@ def get_user(self, login=github.GithubObject.NotSet):\n \"\"\"\n assert login is github.GithubObject.NotSet or isinstance(login, (str, unicode)), login\n if login is github.GithubObject.NotSet:\n- return AuthenticatedUser.AuthenticatedUser(self.__requester, {\"url\": \"/user\"}, completed=False)\n+ return AuthenticatedUser.AuthenticatedUser(self.__requester, {}, {\"url\": \"/user\"}, completed=False)\n else:\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/users/\" + login,\n- None,\n- None\n+ \"/users/\" + login\n )\n- return github.NamedUser.NamedUser(self.__requester, data, completed=True)\n+ return github.NamedUser.NamedUser(self.__requester, headers, data, completed=True)\n \n def get_users(self, since=github.GithubObject.NotSet):\n \"\"\"\n@@ -175,11 +177,9 @@ def get_organization(self, login):\n assert isinstance(login, (str, unicode)), login\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/orgs/\" + login,\n- None,\n- None\n+ \"/orgs/\" + login\n )\n- return github.Organization.Organization(self.__requester, data, completed=True)\n+ return github.Organization.Organization(self.__requester, headers, data, completed=True)\n \n def get_repo(self, full_name):\n \"\"\"\n@@ -189,11 +189,26 @@ def get_repo(self, full_name):\n assert isinstance(full_name, (str, unicode)), full_name\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/repos/\" + full_name,\n- None,\n- None\n+ \"/repos/\" + full_name\n+ )\n+ return Repository.Repository(self.__requester, headers, data, completed=True)\n+\n+ def get_repos(self, since=github.GithubObject.NotSet):\n+ \"\"\"\n+ :calls: `GET /repositories `_\n+ :param since: integer\n+ :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.Repository.Repository`\n+ \"\"\"\n+ assert since is github.GithubObject.NotSet or isinstance(since, (int, long)), since\n+ url_parameters = dict()\n+ if since is not github.GithubObject.NotSet:\n+ url_parameters[\"since\"] = since\n+ return github.PaginatedList.PaginatedList(\n+ github.Repository.Repository,\n+ self.__requester,\n+ \"/repositories\",\n+ url_parameters\n )\n- return Repository.Repository(self.__requester, data, completed=True)\n \n def get_gist(self, id):\n \"\"\"\n@@ -204,11 +219,9 @@ def get_gist(self, id):\n assert isinstance(id, (str, unicode)), id\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/gists/\" + id,\n- None,\n- None\n+ \"/gists/\" + id\n )\n- return github.Gist.Gist(self.__requester, data, completed=True)\n+ return github.Gist.Gist(self.__requester, headers, data, completed=True)\n \n def get_gists(self):\n \"\"\"\n@@ -266,11 +279,9 @@ def legacy_search_user_by_email(self, email):\n assert isinstance(email, (str, unicode)), email\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/legacy/user/email/\" + email,\n- None,\n- None\n+ \"/legacy/user/email/\" + email\n )\n- return github.NamedUser.NamedUser(self.__requester, Legacy.convertUser(data[\"user\"]), completed=False)\n+ return github.NamedUser.NamedUser(self.__requester, headers, Legacy.convertUser(data[\"user\"]), completed=False)\n \n def render_markdown(self, text, context=github.GithubObject.NotSet):\n \"\"\"\n@@ -290,23 +301,20 @@ def render_markdown(self, text, context=github.GithubObject.NotSet):\n status, headers, data = self.__requester.requestJson(\n \"POST\",\n \"/markdown\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n return data\n \n def get_hooks(self):\n \"\"\"\n :calls: `GET /hooks `_\n- :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.HookDescription.HookDescription`\n+ :rtype: list of :class:`github.HookDescription.HookDescription`\n \"\"\"\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/hooks\",\n- None,\n- None\n+ \"/hooks\"\n )\n- return [HookDescription.HookDescription(self.__requester, attributes, completed=True) for attributes in data]\n+ return [HookDescription.HookDescription(self.__requester, headers, attributes, completed=True) for attributes in data]\n \n def get_gitignore_templates(self):\n \"\"\"\n@@ -315,9 +323,7 @@ def get_gitignore_templates(self):\n \"\"\"\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/gitignore/templates\",\n- None,\n- None\n+ \"/gitignore/templates\"\n )\n return data\n \n@@ -329,18 +335,81 @@ def get_gitignore_template(self, name):\n assert isinstance(name, (str, unicode)), name\n headers, attributes = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/gitignore/templates/\" + name,\n- None,\n- None\n+ \"/gitignore/templates/\" + name\n )\n- return GitignoreTemplate.GitignoreTemplate(self.__requester, attributes, completed=True)\n+ return GitignoreTemplate.GitignoreTemplate(self.__requester, headers, attributes, completed=True)\n \n- def create_from_raw_data(self, klass, raw_data):\n+ def create_from_raw_data(self, klass, raw_data, headers={}):\n \"\"\"\n- Creates an object from raw_data previously obtained by :attr:`github.GithubObject.GithubObject.raw_data`\n+ Creates an object from raw_data previously obtained by :attr:`github.GithubObject.GithubObject.raw_data`,\n+ and optionaly headers previously obtained by :attr:`github.GithubObject.GithubObject.raw_headers`.\n \n :param klass: the class of the object to create\n :param raw_data: dict\n+ :param headers: dict\n :rtype: instance of class ``klass``\n \"\"\"\n- return klass(self.__requester, raw_data, completed=True)\n+ return klass(self.__requester, headers, raw_data, completed=True)\n+\n+ def dump(self, obj, file, protocol=0):\n+ \"\"\"\n+ Dumps (pickles) a PyGithub object to a file-like object.\n+ Some effort is made to not pickle sensitive informations like the Github credentials used in the :class:`Github` instance.\n+ But NO EFFORT is made to remove sensitive information from the object's attributes.\n+\n+ :param obj: the object to pickle\n+ :param file: the file-like object to pickle to\n+ :param protocol: the `pickling protocol `_\n+ \"\"\"\n+ pickle.dump((obj.__class__, obj.raw_data, obj.raw_headers), file, protocol)\n+\n+ def load(self, f):\n+ \"\"\"\n+ Loads (unpickles) a PyGithub object from a file-like object.\n+\n+ :param f: the file-like object to unpickle from\n+ :return: the unpickled object\n+ \"\"\"\n+ return self.create_from_raw_data(*pickle.load(f))\n+\n+ def get_api_status(self):\n+ \"\"\"\n+ This doesn't work with a Github Enterprise installation, because it always targets https://status.github.com.\n+\n+ :calls: `GET /api/status.json `_\n+ :rtype: :class:`github.Status.Status`\n+ \"\"\"\n+ headers, attributes = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ \"/api/status.json\",\n+ cnx=\"status\"\n+ )\n+ return Status.Status(self.__requester, headers, attributes, completed=True)\n+\n+ def get_last_api_status_message(self):\n+ \"\"\"\n+ This doesn't work with a Github Enterprise installation, because it always targets https://status.github.com.\n+\n+ :calls: `GET /api/last-message.json `_\n+ :rtype: :class:`github.StatusMessage.StatusMessage`\n+ \"\"\"\n+ headers, attributes = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ \"/api/last-message.json\",\n+ cnx=\"status\"\n+ )\n+ return StatusMessage.StatusMessage(self.__requester, headers, attributes, completed=True)\n+\n+ def get_api_status_messages(self):\n+ \"\"\"\n+ This doesn't work with a Github Enterprise installation, because it always targets https://status.github.com.\n+\n+ :calls: `GET /api/messages.json `_\n+ :rtype: list of :class:`github.StatusMessage.StatusMessage`\n+ \"\"\"\n+ headers, data = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ \"/api/messages.json\",\n+ cnx=\"status\"\n+ )\n+ return [StatusMessage.StatusMessage(self.__requester, headers, attributes, completed=True) for attributes in data]"},{"sha":"c07ec38911b95b9baaccd7926cab22c549a9e5dd","filename":"github/Milestone.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Milestone.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Milestone.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Milestone.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -133,9 +134,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, title, state=github.GithubObject.NotSet, description=github.GithubObject.NotSet, due_on=github.GithubObject.NotSet):\n@@ -163,8 +162,7 @@ def edit(self, title, state=github.GithubObject.NotSet, description=github.Githu\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -206,7 +204,7 @@ def _useAttributes(self, attributes):\n self._created_at = self._parseDatetime(attributes[\"created_at\"])\n if \"creator\" in attributes: # pragma no branch\n assert attributes[\"creator\"] is None or isinstance(attributes[\"creator\"], dict), attributes[\"creator\"]\n- self._creator = None if attributes[\"creator\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"creator\"], completed=False)\n+ self._creator = None if attributes[\"creator\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"creator\"], completed=False)\n if \"description\" in attributes: # pragma no branch\n assert attributes[\"description\"] is None or isinstance(attributes[\"description\"], (str, unicode)), attributes[\"description\"]\n self._description = attributes[\"description\"]"},{"sha":"ec9bfbeddafff7bdf23258a08dc9f0ac8f4d964c","filename":"github/NamedUser.py","status":"modified","additions":19,"deletions":8,"changes":27,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/NamedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/NamedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/NamedUser.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -268,10 +269,9 @@ def create_gist(self, public, files, description=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/gists\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Gist.Gist(self._requester, data, completed=True)\n+ return github.Gist.Gist(self._requester, headers, data, completed=True)\n \n def get_events(self):\n \"\"\"\n@@ -390,11 +390,9 @@ def get_repo(self, name):\n assert isinstance(name, (str, unicode)), name\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/repos/\" + self.login + \"/\" + name,\n- None,\n- None\n+ \"/repos/\" + self.login + \"/\" + name\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def get_repos(self, type=github.GithubObject.NotSet):\n \"\"\"\n@@ -449,6 +447,19 @@ def get_watched(self):\n None\n )\n \n+ def has_in_following(self, following):\n+ \"\"\"\n+ :calls: `GET /user/:user/following/:target_user `_\n+ :param following: :class:`github.NamedUser.NamedUser`\n+ :rtype: bool\n+ \"\"\"\n+ assert isinstance(following, github.NamedUser.NamedUser), following\n+ status, headers, data = self._requester.requestJson(\n+ \"GET\",\n+ self.url + \"/following/\" + following._identity\n+ )\n+ return status == 204\n+\n @property\n def _identity(self):\n return self.login\n@@ -541,7 +552,7 @@ def _useAttributes(self, attributes):\n self._owned_private_repos = attributes[\"owned_private_repos\"]\n if \"plan\" in attributes: # pragma no branch\n assert attributes[\"plan\"] is None or isinstance(attributes[\"plan\"], dict), attributes[\"plan\"]\n- self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, attributes[\"plan\"], completed=False)\n+ self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, self._headers, attributes[\"plan\"], completed=False)\n if \"private_gists\" in attributes: # pragma no branch\n assert attributes[\"private_gists\"] is None or isinstance(attributes[\"private_gists\"], (int, long)), attributes[\"private_gists\"]\n self._private_gists = attributes[\"private_gists\"]"},{"sha":"bb1c96b6780fb31573952d049166fd68ecb5a64a","filename":"github/Notification.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Notification.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Notification.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Notification.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,6 +2,7 @@\n \n ############################ Copyrights and license ############################\n # #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Peter Golm #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n@@ -104,10 +105,10 @@ def _useAttributes(self, attributes):\n self._id = attributes[\"id\"]\n if \"repository\" in attributes: # pragma no branch\n assert attributes[\"repository\"] is None or isinstance(attributes[\"repository\"], dict), attributes[\"repository\"]\n- self._repository = None if attributes[\"repository\"] is None else github.Repository.Repository(self._requester, attributes[\"repository\"], completed=False)\n+ self._repository = None if attributes[\"repository\"] is None else github.Repository.Repository(self._requester, self._headers, attributes[\"repository\"], completed=False)\n if \"subject\" in attributes: # pragma no branch\n assert attributes[\"subject\"] is None or isinstance(attributes[\"subject\"], dict), attributes[\"subject\"]\n- self._subject = None if attributes[\"subject\"] is None else github.NotificationSubject.NotificationSubject(self._requester, attributes[\"subject\"], completed=False)\n+ self._subject = None if attributes[\"subject\"] is None else github.NotificationSubject.NotificationSubject(self._requester, self._headers, attributes[\"subject\"], completed=False)\n if \"reason\" in attributes: # pragma no branch\n assert attributes[\"reason\"] is None or isinstance(attributes[\"reason\"], (str, unicode)), attributes[\"reason\"]\n self._reason = attributes[\"reason\"]"},{"sha":"7e1ce3adbf00f58e49724f0af978be5294a5b6f1","filename":"github/NotificationSubject.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/NotificationSubject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/NotificationSubject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/NotificationSubject.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,6 +2,7 @@\n \n ############################ Copyrights and license ############################\n # #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"68245f3e28173790bcae32b16120ab027b995188","filename":"github/Organization.py","status":"modified","additions":18,"deletions":35,"changes":53,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Organization.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Organization.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Organization.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -243,9 +244,7 @@ def add_to_public_members(self, public_member):\n assert isinstance(public_member, github.NamedUser.NamedUser), public_member\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/public_members/\" + public_member._identity,\n- None,\n- None\n+ self.url + \"/public_members/\" + public_member._identity\n )\n \n def create_fork(self, repo):\n@@ -261,10 +260,9 @@ def create_fork(self, repo):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/repos/\" + repo.owner.login + \"/\" + repo.name + \"/forks\",\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def create_repo(self, name, description=github.GithubObject.NotSet, homepage=github.GithubObject.NotSet, private=github.GithubObject.NotSet, has_issues=github.GithubObject.NotSet, has_wiki=github.GithubObject.NotSet, has_downloads=github.GithubObject.NotSet, team_id=github.GithubObject.NotSet, auto_init=github.GithubObject.NotSet, gitignore_template=github.GithubObject.NotSet):\n \"\"\"\n@@ -315,10 +313,9 @@ def create_repo(self, name, description=github.GithubObject.NotSet, homepage=git\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/repos\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def create_team(self, name, repo_names=github.GithubObject.NotSet, permission=github.GithubObject.NotSet):\n \"\"\"\n@@ -341,10 +338,9 @@ def create_team(self, name, repo_names=github.GithubObject.NotSet, permission=gi\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/teams\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Team.Team(self._requester, data, completed=True)\n+ return github.Team.Team(self._requester, headers, data, completed=True)\n \n def edit(self, billing_email=github.GithubObject.NotSet, blog=github.GithubObject.NotSet, company=github.GithubObject.NotSet, email=github.GithubObject.NotSet, location=github.GithubObject.NotSet, name=github.GithubObject.NotSet):\n \"\"\"\n@@ -379,8 +375,7 @@ def edit(self, billing_email=github.GithubObject.NotSet, blog=github.GithubObjec\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -467,11 +462,9 @@ def get_repo(self, name):\n assert isinstance(name, (str, unicode)), name\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/repos/\" + self.login + \"/\" + name,\n- None,\n- None\n+ \"/repos/\" + self.login + \"/\" + name\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def get_repos(self, type=github.GithubObject.NotSet):\n \"\"\"\n@@ -499,11 +492,9 @@ def get_team(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/teams/\" + str(id),\n- None,\n- None\n+ \"/teams/\" + str(id)\n )\n- return github.Team.Team(self._requester, data, completed=True)\n+ return github.Team.Team(self._requester, headers, data, completed=True)\n \n def get_teams(self):\n \"\"\"\n@@ -526,9 +517,7 @@ def has_in_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n return status == 204\n \n@@ -541,9 +530,7 @@ def has_in_public_members(self, public_member):\n assert isinstance(public_member, github.NamedUser.NamedUser), public_member\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/public_members/\" + public_member._identity,\n- None,\n- None\n+ self.url + \"/public_members/\" + public_member._identity\n )\n return status == 204\n \n@@ -556,9 +543,7 @@ def remove_from_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n \n def remove_from_public_members(self, public_member):\n@@ -570,9 +555,7 @@ def remove_from_public_members(self, public_member):\n assert isinstance(public_member, github.NamedUser.NamedUser), public_member\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/public_members/\" + public_member._identity,\n- None,\n- None\n+ self.url + \"/public_members/\" + public_member._identity\n )\n \n def _initAttributes(self):\n@@ -655,7 +638,7 @@ def _useAttributes(self, attributes):\n self._owned_private_repos = attributes[\"owned_private_repos\"]\n if \"plan\" in attributes: # pragma no branch\n assert attributes[\"plan\"] is None or isinstance(attributes[\"plan\"], dict), attributes[\"plan\"]\n- self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, attributes[\"plan\"], completed=False)\n+ self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, self._headers, attributes[\"plan\"], completed=False)\n if \"private_gists\" in attributes: # pragma no branch\n assert attributes[\"private_gists\"] is None or isinstance(attributes[\"private_gists\"], (int, long)), attributes[\"private_gists\"]\n self._private_gists = attributes[\"private_gists\"]"},{"sha":"4c22b991def262d6e5032a708ba610f65417f1b9","filename":"github/PaginatedList.py","status":"modified","additions":18,"deletions":5,"changes":23,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PaginatedList.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PaginatedList.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PaginatedList.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Bill Mill #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 davidbrai #\n@@ -118,7 +119,11 @@ def __init__(self, contentClass, requester, firstUrl, firstParams):\n self._reversed = False\n \n def _getLastPageUrl(self):\n- headers, data = self.__requester.requestJsonAndCheck(\"GET\", self.__firstUrl, self.__nextParams, None)\n+ headers, data = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ self.__firstUrl,\n+ parameters=self.__nextParams\n+ )\n links = self.__parseLinkHeader(headers)\n lastUrl = links.get(\"last\")\n return lastUrl\n@@ -139,7 +144,11 @@ def _couldGrow(self):\n return self.__nextUrl is not None\n \n def _fetchNextPage(self):\n- headers, data = self.__requester.requestJsonAndCheck(\"GET\", self.__nextUrl, self.__nextParams, None)\n+ headers, data = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ self.__nextUrl,\n+ parameters=self.__nextParams\n+ )\n \n self.__nextUrl = None\n if len(data) > 0:\n@@ -152,7 +161,7 @@ def _fetchNextPage(self):\n self.__nextParams = None\n \n content = [\n- self.__contentClass(self.__requester, element, completed=False)\n+ self.__contentClass(self.__requester, headers, element, completed=False)\n for element in data\n ]\n if self._reversed:\n@@ -176,9 +185,13 @@ def get_page(self, page):\n params[\"page\"] = page + 1\n if self.__requester.per_page != 30:\n params[\"per_page\"] = self.__requester.per_page\n- headers, data = self.__requester.requestJsonAndCheck(\"GET\", self.__firstUrl, params, None)\n+ headers, data = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ self.__firstUrl,\n+ parameters=params\n+ )\n \n return [\n- self.__contentClass(self.__requester, element, completed=False)\n+ self.__contentClass(self.__requester, headers, element, completed=False)\n for element in data\n ]"},{"sha":"3a3b420615062ee9e8a4fff31b65bd575c65d5a9","filename":"github/Permissions.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Permissions.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Permissions.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Permissions.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"99a3c3a6d9b4bef7b9bc78f0bd247a4083a2285e","filename":"github/Plan.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Plan.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Plan.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Plan.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"85867c60e0f888692b9410f45be43cb69528ca0b","filename":"github/PullRequest.py","status":"modified","additions":18,"deletions":27,"changes":45,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequest.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequest.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PullRequest.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Michael Stead #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -291,10 +292,9 @@ def create_review_comment(self, body, commit_id, path, position):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.PullRequestComment.PullRequestComment(self._requester, data, completed=True)\n+ return github.PullRequestComment.PullRequestComment(self._requester, headers, data, completed=True)\n \n def create_issue_comment(self, body):\n \"\"\"\n@@ -309,10 +309,9 @@ def create_issue_comment(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self._parentUrl(self._parentUrl(self.url)) + \"/issues/\" + str(self.number) + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.IssueComment.IssueComment(self._requester, data, completed=True)\n+ return github.IssueComment.IssueComment(self._requester, headers, data, completed=True)\n \n def edit(self, title=github.GithubObject.NotSet, body=github.GithubObject.NotSet, state=github.GithubObject.NotSet):\n \"\"\"\n@@ -335,8 +334,7 @@ def edit(self, title=github.GithubObject.NotSet, body=github.GithubObject.NotSet\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -357,11 +355,9 @@ def get_review_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self._parentUrl(self.url) + \"/comments/\" + str(id),\n- None,\n- None\n+ self._parentUrl(self.url) + \"/comments/\" + str(id)\n )\n- return github.PullRequestComment.PullRequestComment(self._requester, data, completed=True)\n+ return github.PullRequestComment.PullRequestComment(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -415,11 +411,9 @@ def get_issue_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self._parentUrl(self._parentUrl(self.url)) + \"/issues/comments/\" + str(id),\n- None,\n- None\n+ self._parentUrl(self._parentUrl(self.url)) + \"/issues/comments/\" + str(id)\n )\n- return github.IssueComment.IssueComment(self._requester, data, completed=True)\n+ return github.IssueComment.IssueComment(self._requester, headers, data, completed=True)\n \n def get_issue_comments(self):\n \"\"\"\n@@ -440,9 +434,7 @@ def is_merged(self):\n \"\"\"\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/merge\",\n- None,\n- None\n+ self.url + \"/merge\"\n )\n return status == 204\n \n@@ -459,10 +451,9 @@ def merge(self, commit_message=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n self.url + \"/merge\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.PullRequestMergeStatus.PullRequestMergeStatus(self._requester, data, completed=True)\n+ return github.PullRequestMergeStatus.PullRequestMergeStatus(self._requester, headers, data, completed=True)\n \n def _initAttributes(self):\n self._additions = github.GithubObject.NotSet\n@@ -499,10 +490,10 @@ def _useAttributes(self, attributes):\n self._additions = attributes[\"additions\"]\n if \"assignee\" in attributes: # pragma no branch\n assert attributes[\"assignee\"] is None or isinstance(attributes[\"assignee\"], dict), attributes[\"assignee\"]\n- self._assignee = None if attributes[\"assignee\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"assignee\"], completed=False)\n+ self._assignee = None if attributes[\"assignee\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"assignee\"], completed=False)\n if \"base\" in attributes: # pragma no branch\n assert attributes[\"base\"] is None or isinstance(attributes[\"base\"], dict), attributes[\"base\"]\n- self._base = None if attributes[\"base\"] is None else github.PullRequestPart.PullRequestPart(self._requester, attributes[\"base\"], completed=False)\n+ self._base = None if attributes[\"base\"] is None else github.PullRequestPart.PullRequestPart(self._requester, self._headers, attributes[\"base\"], completed=False)\n if \"body\" in attributes: # pragma no branch\n assert attributes[\"body\"] is None or isinstance(attributes[\"body\"], (str, unicode)), attributes[\"body\"]\n self._body = attributes[\"body\"]\n@@ -529,7 +520,7 @@ def _useAttributes(self, attributes):\n self._diff_url = attributes[\"diff_url\"]\n if \"head\" in attributes: # pragma no branch\n assert attributes[\"head\"] is None or isinstance(attributes[\"head\"], dict), attributes[\"head\"]\n- self._head = None if attributes[\"head\"] is None else github.PullRequestPart.PullRequestPart(self._requester, attributes[\"head\"], completed=False)\n+ self._head = None if attributes[\"head\"] is None else github.PullRequestPart.PullRequestPart(self._requester, self._headers, attributes[\"head\"], completed=False)\n if \"html_url\" in attributes: # pragma no branch\n assert attributes[\"html_url\"] is None or isinstance(attributes[\"html_url\"], (str, unicode)), attributes[\"html_url\"]\n self._html_url = attributes[\"html_url\"]\n@@ -550,7 +541,7 @@ def _useAttributes(self, attributes):\n self._merged_at = self._parseDatetime(attributes[\"merged_at\"])\n if \"merged_by\" in attributes: # pragma no branch\n assert attributes[\"merged_by\"] is None or isinstance(attributes[\"merged_by\"], dict), attributes[\"merged_by\"]\n- self._merged_by = None if attributes[\"merged_by\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"merged_by\"], completed=False)\n+ self._merged_by = None if attributes[\"merged_by\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"merged_by\"], completed=False)\n if \"number\" in attributes: # pragma no branch\n assert attributes[\"number\"] is None or isinstance(attributes[\"number\"], (int, long)), attributes[\"number\"]\n self._number = attributes[\"number\"]\n@@ -574,4 +565,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"1e96426e98b1f17f5ec26185257276cafabb376b","filename":"github/PullRequestComment.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PullRequestComment.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Michael Stead #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n@@ -138,9 +139,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, body):\n@@ -156,8 +155,7 @@ def edit(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -211,4 +209,4 @@ def _useAttributes(self, attributes):\n self._html_url = attributes[\"html_url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"9c416dbd5a260662bca2f7d8d3725e87f822ae06","filename":"github/PullRequestMergeStatus.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestMergeStatus.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestMergeStatus.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PullRequestMergeStatus.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #"},{"sha":"791452b028bd4d1a970b78581b849bb755be2efa","filename":"github/PullRequestPart.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestPart.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestPart.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PullRequestPart.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -85,10 +86,10 @@ def _useAttributes(self, attributes):\n self._ref = attributes[\"ref\"]\n if \"repo\" in attributes: # pragma no branch\n assert attributes[\"repo\"] is None or isinstance(attributes[\"repo\"], dict), attributes[\"repo\"]\n- self._repo = None if attributes[\"repo\"] is None else github.Repository.Repository(self._requester, attributes[\"repo\"], completed=False)\n+ self._repo = None if attributes[\"repo\"] is None else github.Repository.Repository(self._requester, self._headers, attributes[\"repo\"], completed=False)\n if \"sha\" in attributes: # pragma no branch\n assert attributes[\"sha\"] is None or isinstance(attributes[\"sha\"], (str, unicode)), attributes[\"sha\"]\n self._sha = attributes[\"sha\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"7eb3d235917b3a63e8d31caefae5cba981a25134","filename":"github/Repository.py","status":"modified","additions":85,"deletions":152,"changes":237,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Repository.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Repository.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Repository.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -7,6 +7,7 @@\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n # Copyright 2013 Adrian Petrescu #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Mark Roddy #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n@@ -316,9 +317,7 @@ def add_to_collaborators(self, collaborator):\n assert isinstance(collaborator, github.NamedUser.NamedUser), collaborator\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/collaborators/\" + collaborator._identity,\n- None,\n- None\n+ self.url + \"/collaborators/\" + collaborator._identity\n )\n \n def compare(self, base, head):\n@@ -332,11 +331,9 @@ def compare(self, base, head):\n assert isinstance(head, (str, unicode)), head\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/compare/\" + base + \"...\" + head,\n- None,\n- None\n+ self.url + \"/compare/\" + base + \"...\" + head\n )\n- return github.Comparison.Comparison(self._requester, data, completed=True)\n+ return github.Comparison.Comparison(self._requester, headers, data, completed=True)\n \n def create_download(self, name, size, description=github.GithubObject.NotSet, content_type=github.GithubObject.NotSet):\n \"\"\"\n@@ -362,10 +359,9 @@ def create_download(self, name, size, description=github.GithubObject.NotSet, co\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/downloads\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Download.Download(self._requester, data, completed=True)\n+ return github.Download.Download(self._requester, headers, data, completed=True)\n \n def create_git_blob(self, content, encoding):\n \"\"\"\n@@ -383,10 +379,9 @@ def create_git_blob(self, content, encoding):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/blobs\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitBlob.GitBlob(self._requester, data, completed=True)\n+ return github.GitBlob.GitBlob(self._requester, headers, data, completed=True)\n \n def create_git_commit(self, message, tree, parents, author=github.GithubObject.NotSet, committer=github.GithubObject.NotSet):\n \"\"\"\n@@ -415,10 +410,9 @@ def create_git_commit(self, message, tree, parents, author=github.GithubObject.N\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/commits\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitCommit.GitCommit(self._requester, data, completed=True)\n+ return github.GitCommit.GitCommit(self._requester, headers, data, completed=True)\n \n def create_git_ref(self, ref, sha):\n \"\"\"\n@@ -436,10 +430,9 @@ def create_git_ref(self, ref, sha):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/refs\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitRef.GitRef(self._requester, data, completed=True)\n+ return github.GitRef.GitRef(self._requester, headers, data, completed=True)\n \n def create_git_tag(self, tag, message, object, type, tagger=github.GithubObject.NotSet):\n \"\"\"\n@@ -467,10 +460,9 @@ def create_git_tag(self, tag, message, object, type, tagger=github.GithubObject.\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/tags\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitTag.GitTag(self._requester, data, completed=True)\n+ return github.GitTag.GitTag(self._requester, headers, data, completed=True)\n \n def create_git_tree(self, tree, base_tree=github.GithubObject.NotSet):\n \"\"\"\n@@ -489,10 +481,9 @@ def create_git_tree(self, tree, base_tree=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/trees\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitTree.GitTree(self._requester, data, completed=True)\n+ return github.GitTree.GitTree(self._requester, headers, data, completed=True)\n \n def create_hook(self, name, config, events=github.GithubObject.NotSet, active=github.GithubObject.NotSet):\n \"\"\"\n@@ -518,10 +509,9 @@ def create_hook(self, name, config, events=github.GithubObject.NotSet, active=gi\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/hooks\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Hook.Hook(self._requester, data, completed=True)\n+ return github.Hook.Hook(self._requester, headers, data, completed=True)\n \n def create_issue(self, title, body=github.GithubObject.NotSet, assignee=github.GithubObject.NotSet, milestone=github.GithubObject.NotSet, labels=github.GithubObject.NotSet):\n \"\"\"\n@@ -552,10 +542,9 @@ def create_issue(self, title, body=github.GithubObject.NotSet, assignee=github.G\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/issues\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Issue.Issue(self._requester, data, completed=True)\n+ return github.Issue.Issue(self._requester, headers, data, completed=True)\n \n def create_key(self, title, key):\n \"\"\"\n@@ -573,10 +562,9 @@ def create_key(self, title, key):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/keys\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.RepositoryKey.RepositoryKey(self._requester, data, completed=True, repoUrl=self._url)\n+ return github.RepositoryKey.RepositoryKey(self._requester, headers, data, completed=True, repoUrl=self._url)\n \n def create_label(self, name, color):\n \"\"\"\n@@ -594,10 +582,9 @@ def create_label(self, name, color):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/labels\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Label.Label(self._requester, data, completed=True)\n+ return github.Label.Label(self._requester, headers, data, completed=True)\n \n def create_milestone(self, title, state=github.GithubObject.NotSet, description=github.GithubObject.NotSet, due_on=github.GithubObject.NotSet):\n \"\"\"\n@@ -624,10 +611,9 @@ def create_milestone(self, title, state=github.GithubObject.NotSet, description=\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/milestones\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Milestone.Milestone(self._requester, data, completed=True)\n+ return github.Milestone.Milestone(self._requester, headers, data, completed=True)\n \n def create_pull(self, *args, **kwds):\n \"\"\"\n@@ -662,10 +648,9 @@ def __create_pull(self, **kwds):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/pulls\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.PullRequest.PullRequest(self._requester, data, completed=True)\n+ return github.PullRequest.PullRequest(self._requester, headers, data, completed=True)\n \n def delete(self):\n \"\"\"\n@@ -674,9 +659,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n 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):\n@@ -720,8 +703,7 @@ def edit(self, name, description=github.GithubObject.NotSet, homepage=github.Git\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -739,9 +721,7 @@ def get_archive_link(self, archive_format, ref=github.GithubObject.NotSet):\n url += \"/\" + ref\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- url,\n- None,\n- None\n+ url\n )\n return headers[\"location\"]\n \n@@ -766,11 +746,9 @@ def get_branch(self, branch):\n assert isinstance(branch, (str, unicode)), branch\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/branches/\" + branch,\n- None,\n- None\n+ self.url + \"/branches/\" + branch\n )\n- return github.Branch.Branch(self._requester, data, completed=True)\n+ return github.Branch.Branch(self._requester, headers, data, completed=True)\n \n def get_branches(self):\n \"\"\"\n@@ -805,11 +783,9 @@ def get_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/comments/\" + str(id),\n- None,\n- None\n+ self.url + \"/comments/\" + str(id)\n )\n- return github.CommitComment.CommitComment(self._requester, data, completed=True)\n+ return github.CommitComment.CommitComment(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -832,11 +808,9 @@ def get_commit(self, sha):\n assert isinstance(sha, (str, unicode)), sha\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/commits/\" + sha,\n- None,\n- None\n+ self.url + \"/commits/\" + sha\n )\n- return github.Commit.Commit(self._requester, data, completed=True)\n+ return github.Commit.Commit(self._requester, headers, data, completed=True)\n \n def get_commits(self, sha=github.GithubObject.NotSet, path=github.GithubObject.NotSet, since=github.GithubObject.NotSet, until=github.GithubObject.NotSet):\n \"\"\"\n@@ -891,10 +865,9 @@ def get_contents(self, path, ref=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n self.url + \"/contents\" + path,\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n- return github.ContentFile.ContentFile(self._requester, data, completed=True)\n+ return github.ContentFile.ContentFile(self._requester, headers, data, completed=True)\n \n def get_dir_contents(self, path, ref=github.GithubObject.NotSet):\n \"\"\"\n@@ -911,8 +884,7 @@ def get_dir_contents(self, path, ref=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n self.url + \"/contents\" + path,\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n \n # Handle 302 redirect response\n@@ -920,12 +892,11 @@ def get_dir_contents(self, path, ref=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n headers['location'],\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n \n return [\n- github.ContentFile.ContentFile(self._requester, attributes, completed=(attributes[\"type\"] != \"file\")) # Lazy completion only makes sense for files. See discussion here: https://github.com/jacquev6/PyGithub/issues/140#issuecomment-13481130\n+ github.ContentFile.ContentFile(self._requester, headers, attributes, completed=(attributes[\"type\"] != \"file\")) # Lazy completion only makes sense for files. See discussion here: https://github.com/jacquev6/PyGithub/issues/140#issuecomment-13481130\n for attributes in data\n ]\n \n@@ -950,11 +921,9 @@ def get_download(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/downloads/\" + str(id),\n- None,\n- None\n+ self.url + \"/downloads/\" + str(id)\n )\n- return github.Download.Download(self._requester, data, completed=True)\n+ return github.Download.Download(self._requester, headers, data, completed=True)\n \n def get_downloads(self):\n \"\"\"\n@@ -1001,11 +970,9 @@ def get_git_blob(self, sha):\n assert isinstance(sha, (str, unicode)), sha\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/git/blobs/\" + sha,\n- None,\n- None\n+ self.url + \"/git/blobs/\" + sha\n )\n- return github.GitBlob.GitBlob(self._requester, data, completed=True)\n+ return github.GitBlob.GitBlob(self._requester, headers, data, completed=True)\n \n def get_git_commit(self, sha):\n \"\"\"\n@@ -1016,11 +983,9 @@ def get_git_commit(self, sha):\n assert isinstance(sha, (str, unicode)), sha\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/git/commits/\" + sha,\n- None,\n- None\n+ self.url + \"/git/commits/\" + sha\n )\n- return github.GitCommit.GitCommit(self._requester, data, completed=True)\n+ return github.GitCommit.GitCommit(self._requester, headers, data, completed=True)\n \n def get_git_ref(self, ref):\n \"\"\"\n@@ -1034,11 +999,9 @@ def get_git_ref(self, ref):\n assert isinstance(ref, (str, unicode)), ref\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + prefix + ref,\n- None,\n- None\n+ self.url + prefix + ref\n )\n- return github.GitRef.GitRef(self._requester, data, completed=True)\n+ return github.GitRef.GitRef(self._requester, headers, data, completed=True)\n \n def get_git_refs(self):\n \"\"\"\n@@ -1061,11 +1024,9 @@ def get_git_tag(self, sha):\n assert isinstance(sha, (str, unicode)), sha\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/git/tags/\" + sha,\n- None,\n- None\n+ self.url + \"/git/tags/\" + sha\n )\n- return github.GitTag.GitTag(self._requester, data, completed=True)\n+ return github.GitTag.GitTag(self._requester, headers, data, completed=True)\n \n def get_git_tree(self, sha, recursive=github.GithubObject.NotSet):\n \"\"\"\n@@ -1082,10 +1043,9 @@ def get_git_tree(self, sha, recursive=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n self.url + \"/git/trees/\" + sha,\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n- return github.GitTree.GitTree(self._requester, data, completed=True)\n+ return github.GitTree.GitTree(self._requester, headers, data, completed=True)\n \n def get_hook(self, id):\n \"\"\"\n@@ -1096,11 +1056,9 @@ def get_hook(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/hooks/\" + str(id),\n- None,\n- None\n+ self.url + \"/hooks/\" + str(id)\n )\n- return github.Hook.Hook(self._requester, data, completed=True)\n+ return github.Hook.Hook(self._requester, headers, data, completed=True)\n \n def get_hooks(self):\n \"\"\"\n@@ -1123,11 +1081,9 @@ def get_issue(self, number):\n assert isinstance(number, (int, long)), number\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/issues/\" + str(number),\n- None,\n- None\n+ self.url + \"/issues/\" + str(number)\n )\n- return github.Issue.Issue(self._requester, data, completed=True)\n+ return github.Issue.Issue(self._requester, headers, data, completed=True)\n \n def get_issues(self, milestone=github.GithubObject.NotSet, state=github.GithubObject.NotSet, assignee=github.GithubObject.NotSet, mentioned=github.GithubObject.NotSet, labels=github.GithubObject.NotSet, sort=github.GithubObject.NotSet, direction=github.GithubObject.NotSet, since=github.GithubObject.NotSet):\n \"\"\"\n@@ -1214,11 +1170,9 @@ def get_issues_event(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/issues/events/\" + str(id),\n- None,\n- None\n+ self.url + \"/issues/events/\" + str(id)\n )\n- return github.IssueEvent.IssueEvent(self._requester, data, completed=True)\n+ return github.IssueEvent.IssueEvent(self._requester, headers, data, completed=True)\n \n def get_issues_events(self):\n \"\"\"\n@@ -1241,11 +1195,9 @@ def get_key(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/keys/\" + str(id),\n- None,\n- None\n+ self.url + \"/keys/\" + str(id)\n )\n- return github.RepositoryKey.RepositoryKey(self._requester, data, completed=True, repoUrl=self._url)\n+ return github.RepositoryKey.RepositoryKey(self._requester, headers, data, completed=True, repoUrl=self._url)\n \n def get_keys(self):\n \"\"\"\n@@ -1253,7 +1205,7 @@ def get_keys(self):\n :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.RepositoryKey.RepositoryKey`\n \"\"\"\n return github.PaginatedList.PaginatedList(\n- lambda requester, data, completed: github.RepositoryKey.RepositoryKey(requester, data, completed, repoUrl=self._url),\n+ lambda requester, headers, data, completed: github.RepositoryKey.RepositoryKey(requester, headers, data, completed, repoUrl=self._url),\n self._requester,\n self.url + \"/keys\",\n None\n@@ -1268,11 +1220,9 @@ def get_label(self, name):\n assert isinstance(name, (str, unicode)), name\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/labels/\" + urllib.quote(name),\n- None,\n- None\n+ self.url + \"/labels/\" + urllib.quote(name)\n )\n- return github.Label.Label(self._requester, data, completed=True)\n+ return github.Label.Label(self._requester, headers, data, completed=True)\n \n def get_labels(self):\n \"\"\"\n@@ -1293,9 +1243,7 @@ def get_languages(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/languages\",\n- None,\n- None\n+ self.url + \"/languages\"\n )\n return data\n \n@@ -1308,11 +1256,9 @@ def get_milestone(self, number):\n assert isinstance(number, (int, long)), number\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/milestones/\" + str(number),\n- None,\n- None\n+ self.url + \"/milestones/\" + str(number)\n )\n- return github.Milestone.Milestone(self._requester, data, completed=True)\n+ return github.Milestone.Milestone(self._requester, headers, data, completed=True)\n \n def get_milestones(self, state=github.GithubObject.NotSet, sort=github.GithubObject.NotSet, direction=github.GithubObject.NotSet):\n \"\"\"\n@@ -1360,11 +1306,9 @@ def get_pull(self, number):\n assert isinstance(number, (int, long)), number\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/pulls/\" + str(number),\n- None,\n- None\n+ self.url + \"/pulls/\" + str(number)\n )\n- return github.PullRequest.PullRequest(self._requester, data, completed=True)\n+ return github.PullRequest.PullRequest(self._requester, headers, data, completed=True)\n \n def get_pulls(self, state=github.GithubObject.NotSet):\n \"\"\"\n@@ -1431,10 +1375,9 @@ def get_readme(self, ref=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n self.url + \"/readme\",\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n- return github.ContentFile.ContentFile(self._requester, data, completed=True)\n+ return github.ContentFile.ContentFile(self._requester, headers, data, completed=True)\n \n def get_stargazers(self):\n \"\"\"\n@@ -1505,9 +1448,7 @@ def has_in_assignees(self, assignee):\n assert isinstance(assignee, github.NamedUser.NamedUser), assignee\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/assignees/\" + assignee._identity,\n- None,\n- None\n+ self.url + \"/assignees/\" + assignee._identity\n )\n return status == 204\n \n@@ -1520,9 +1461,7 @@ def has_in_collaborators(self, collaborator):\n assert isinstance(collaborator, github.NamedUser.NamedUser), collaborator\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/collaborators/\" + collaborator._identity,\n- None,\n- None\n+ self.url + \"/collaborators/\" + collaborator._identity\n )\n return status == 204\n \n@@ -1537,12 +1476,10 @@ def legacy_search_issues(self, state, keyword):\n assert isinstance(keyword, (str, unicode)), keyword\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/legacy/issues/search/\" + self.owner.login + \"/\" + self.name + \"/\" + state + \"/\" + urllib.quote(keyword),\n- None,\n- None\n+ \"/legacy/issues/search/\" + self.owner.login + \"/\" + self.name + \"/\" + state + \"/\" + urllib.quote(keyword)\n )\n return [\n- github.Issue.Issue(self._requester, github.Legacy.convertIssue(element), completed=False)\n+ github.Issue.Issue(self._requester, headers, github.Legacy.convertIssue(element), completed=False)\n for element in data[\"issues\"]\n ]\n \n@@ -1566,13 +1503,12 @@ def merge(self, base, head, commit_message=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/merges\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n if data is None:\n return None\n else:\n- return github.Commit.Commit(self._requester, data, completed=True)\n+ return github.Commit.Commit(self._requester, headers, data, completed=True)\n \n def remove_from_collaborators(self, collaborator):\n \"\"\"\n@@ -1583,9 +1519,7 @@ def remove_from_collaborators(self, collaborator):\n assert isinstance(collaborator, github.NamedUser.NamedUser), collaborator\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/collaborators/\" + collaborator._identity,\n- None,\n- None\n+ self.url + \"/collaborators/\" + collaborator._identity\n )\n \n def subscribe_to_hub(self, event, callback, secret=github.GithubObject.NotSet):\n@@ -1625,8 +1559,7 @@ def _hub(self, mode, event, callback, secret):\n responseHeaders, output = self._requester.requestMultipartAndCheck(\n \"POST\",\n \"/hub\",\n- None,\n- post_parameters,\n+ input=post_parameters\n )\n \n @property\n@@ -1719,16 +1652,16 @@ def _useAttributes(self, attributes):\n self._open_issues = attributes[\"open_issues\"]\n if \"organization\" in attributes: # pragma no branch\n assert attributes[\"organization\"] is None or isinstance(attributes[\"organization\"], dict), attributes[\"organization\"]\n- self._organization = None if attributes[\"organization\"] is None else github.Organization.Organization(self._requester, attributes[\"organization\"], completed=False)\n+ self._organization = None if attributes[\"organization\"] is None else github.Organization.Organization(self._requester, self._headers, attributes[\"organization\"], completed=False)\n if \"owner\" in attributes: # pragma no branch\n assert attributes[\"owner\"] is None or isinstance(attributes[\"owner\"], dict), attributes[\"owner\"]\n- self._owner = None if attributes[\"owner\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"owner\"], completed=False)\n+ self._owner = None if attributes[\"owner\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"owner\"], completed=False)\n if \"parent\" in attributes: # pragma no branch\n assert attributes[\"parent\"] is None or isinstance(attributes[\"parent\"], dict), attributes[\"parent\"]\n- self._parent = None if attributes[\"parent\"] is None else Repository(self._requester, attributes[\"parent\"], completed=False)\n+ self._parent = None if attributes[\"parent\"] is None else Repository(self._requester, self._headers, attributes[\"parent\"], completed=False)\n if \"permissions\" in attributes: # pragma no branch\n assert attributes[\"permissions\"] is None or isinstance(attributes[\"permissions\"], dict), attributes[\"permissions\"]\n- self._permissions = None if attributes[\"permissions\"] is None else github.Permissions.Permissions(self._requester, attributes[\"permissions\"], completed=False)\n+ self._permissions = None if attributes[\"permissions\"] is None else github.Permissions.Permissions(self._requester, self._headers, attributes[\"permissions\"], completed=False)\n if \"private\" in attributes: # pragma no branch\n assert attributes[\"private\"] is None or isinstance(attributes[\"private\"], bool), attributes[\"private\"]\n self._private = attributes[\"private\"]\n@@ -1740,7 +1673,7 @@ def _useAttributes(self, attributes):\n self._size = attributes[\"size\"]\n if \"source\" in attributes: # pragma no branch\n assert attributes[\"source\"] is None or isinstance(attributes[\"source\"], dict), attributes[\"source\"]\n- self._source = None if attributes[\"source\"] is None else Repository(self._requester, attributes[\"source\"], completed=False)\n+ self._source = None if attributes[\"source\"] is None else Repository(self._requester, self._headers, attributes[\"source\"], completed=False)\n if \"ssh_url\" in attributes: # pragma no branch\n assert attributes[\"ssh_url\"] is None or isinstance(attributes[\"ssh_url\"], (str, unicode)), attributes[\"ssh_url\"]\n self._ssh_url = attributes[\"ssh_url\"]"},{"sha":"69e1c6162f2f414f9679101b3fb29de677f7e72f","filename":"github/RepositoryKey.py","status":"modified","additions":5,"deletions":7,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/RepositoryKey.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/RepositoryKey.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/RepositoryKey.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Srijan Choudhary #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n@@ -33,8 +34,8 @@ class RepositoryKey(github.GithubObject.CompletableGithubObject):\n This class represents RepositoryKeys. The reference can be found here http://developer.github.com/v3/repos/keys/\n \"\"\"\n \n- def __init__(self, requester, attributes, completed, repoUrl):\n- github.GithubObject.CompletableGithubObject.__init__(self, requester, attributes, completed)\n+ def __init__(self, requester, headers, attributes, completed, repoUrl):\n+ github.GithubObject.CompletableGithubObject.__init__(self, requester, headers, attributes, completed)\n self.__repoUrl = repoUrl\n \n @property\n@@ -88,9 +89,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.__customUrl,\n- None,\n- None\n+ self.__customUrl\n )\n \n def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet):\n@@ -110,8 +109,7 @@ def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet)\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.__customUrl,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n "},{"sha":"836b776e42a3080cffc8d5f1e6959fa6414a518c","filename":"github/Requester.py","status":"modified","additions":88,"deletions":18,"changes":106,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Requester.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Requester.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Requester.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -9,6 +9,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Ed Jackson #\n # Copyright 2013 Jonathan J Hunt #\n # Copyright 2013 Mark Roddy #\n@@ -37,6 +38,7 @@\n import urllib\n import urlparse\n import sys\n+import Consts\n \n atLeastPython26 = sys.hexversion >= 0x02060000\n atLeastPython3 = sys.hexversion >= 0x03000000\n@@ -63,7 +65,66 @@ def resetConnectionClasses(cls):\n cls.__httpConnectionClass = httplib.HTTPConnection\n cls.__httpsConnectionClass = httplib.HTTPSConnection\n \n+ #############################################################\n+ # For Debug\n+ @classmethod\n+ def setDebugFlag(cls, flag):\n+ cls.DEBUG_FLAG = flag\n+\n+ @classmethod\n+ def setOnCheckMe(cls, onCheckMe):\n+ cls.ON_CHECK_ME = onCheckMe\n+\n+ DEBUG_FLAG = False\n+\n+ DEBUG_FRAME_BUFFER_SIZE = 1024\n+\n+ DEBUG_HEADER_KEY = \"DEBUG_FRAME\"\n+\n+ ON_CHECK_ME = None\n+\n+ def NEW_DEBUG_FRAME(self, requestHeader):\n+ '''\n+ Initialize a debug frame with requestHeader\n+ Frame count is updated and will be attached to respond header\n+ The structure of a frame: [requestHeader, statusCode, responseHeader, raw_data]\n+ Some of them may be None\n+ '''\n+ if self.DEBUG_FLAG: # pragma no branch (Flag always set in tests)\n+ new_frame = [requestHeader, None, None, None]\n+ if self._frameCount < self.DEBUG_FRAME_BUFFER_SIZE - 1: # pragma no branch (Should be covered)\n+ self._frameBuffer.append(new_frame)\n+ else:\n+ self._frameBuffer[0] = new_frame # pragma no cover (Should be covered)\n+\n+ self._frameCount = len(self._frameBuffer) - 1\n+\n+ def DEBUG_ON_RESPONSE(self, statusCode, responseHeader, data):\n+ '''\n+ Update current frame with response\n+ Current frame index will be attached to responseHeader\n+ '''\n+ if self.DEBUG_FLAG: # pragma no branch (Flag always set in tests)\n+ self._frameBuffer[self._frameCount][1:4] = [statusCode, responseHeader, data]\n+ responseHeader[self.DEBUG_HEADER_KEY] = self._frameCount\n+\n+ def check_me(self, obj):\n+ if self.DEBUG_FLAG and self.ON_CHECK_ME is not None: # pragma no branch (Flag always set in tests)\n+ frame = None\n+ if self.DEBUG_HEADER_KEY in obj._headers:\n+ frame_index = obj._headers[self.DEBUG_HEADER_KEY]\n+ frame = self._frameBuffer[frame_index]\n+ self.ON_CHECK_ME(obj, frame)\n+\n+ def _initializeDebugFeature(self):\n+ self._frameCount = 0\n+ self._frameBuffer = []\n+\n+ #############################################################\n+\n def __init__(self, login_or_token, password, base_url, timeout, client_id, client_secret, user_agent, per_page):\n+ self._initializeDebugFeature()\n+\n if password is not None:\n login = login_or_token\n if atLeastPython3:\n@@ -103,11 +164,11 @@ def __init__(self, login_or_token, password, base_url, timeout, client_id, clien\n 'See http://developer.github.com/v3/#user-agent-required'\n self.__userAgent = user_agent\n \n- def requestJsonAndCheck(self, verb, url, parameters, input):\n- return self.__check(*self.requestJson(verb, url, parameters, input))\n+ def requestJsonAndCheck(self, verb, url, parameters=None, headers=None, input=None, cnx=None):\n+ return self.__check(*self.requestJson(verb, url, parameters, headers, input, cnx))\n \n- def requestMultipartAndCheck(self, verb, url, parameters, input):\n- return self.__check(*self.requestMultipart(verb, url, parameters, input))\n+ def requestMultipartAndCheck(self, verb, url, parameters=None, headers=None, input=None):\n+ return self.__check(*self.requestMultipart(verb, url, parameters, headers, input))\n \n def __check(self, status, responseHeaders, output):\n output = self.__structuredFromJson(output)\n@@ -116,13 +177,13 @@ def __check(self, status, responseHeaders, output):\n return responseHeaders, output\n \n def __createException(self, status, output):\n- if status == 401 and output[\"message\"] == \"Bad credentials\":\n+ if status == 401 and output.get(\"message\") == \"Bad credentials\":\n cls = GithubException.BadCredentialsException\n- elif status == 403 and output[\"message\"].startswith(\"Missing or invalid User Agent string\"):\n+ elif status == 403 and output.get(\"message\").startswith(\"Missing or invalid User Agent string\"):\n cls = GithubException.BadUserAgentException\n- elif status == 403 and output[\"message\"].startswith(\"API Rate Limit Exceeded\"):\n+ elif status == 403 and output.get(\"message\").startswith(\"API Rate Limit Exceeded\"):\n cls = GithubException.RateLimitExceededException\n- elif status == 404 and output[\"message\"] == \"Not Found\":\n+ elif status == 404 and output.get(\"message\") == \"Not Found\":\n cls = GithubException.UnknownObjectException\n else:\n cls = GithubException.GithubException\n@@ -139,13 +200,13 @@ def __structuredFromJson(self, data):\n except ValueError, e:\n return {'data': data}\n \n- def requestJson(self, verb, url, parameters, input):\n+ def requestJson(self, verb, url, parameters=None, headers=None, input=None, cnx=None):\n def encode(input):\n return \"application/json\", json.dumps(input)\n \n- return self.__requestEncode(verb, url, parameters, input, encode)\n+ return self.__requestEncode(cnx, verb, url, parameters, headers, input, encode)\n \n- def requestMultipart(self, verb, url, parameters, input):\n+ def requestMultipart(self, verb, url, parameters=None, headers=None, input=None):\n def encode(input):\n boundary = \"----------------------------3c3ba8b523b2\"\n eol = \"\\r\\n\"\n@@ -159,14 +220,15 @@ def encode(input):\n encoded_input += \"--\" + boundary + \"--\" + eol\n return \"multipart/form-data; boundary=\" + boundary, encoded_input\n \n- return self.__requestEncode(verb, url, parameters, input, encode)\n+ return self.__requestEncode(None, verb, url, parameters, headers, input, encode)\n \n- def __requestEncode(self, verb, url, parameters, input, encode):\n+ def __requestEncode(self, cnx, verb, url, parameters, requestHeaders, input, encode):\n assert verb in [\"HEAD\", \"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\"]\n if parameters is None:\n parameters = dict()\n+ if requestHeaders is None:\n+ requestHeaders = dict()\n \n- requestHeaders = dict()\n self.__authenticate(url, requestHeaders, parameters)\n requestHeaders[\"User-Agent\"] = self.__userAgent\n \n@@ -177,7 +239,9 @@ def __requestEncode(self, verb, url, parameters, input, encode):\n if input is not None:\n requestHeaders[\"Content-Type\"], encoded_input = encode(input)\n \n- status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)\n+ self.NEW_DEBUG_FRAME(requestHeaders)\n+\n+ status, responseHeaders, output = self.__requestRaw(cnx, verb, url, requestHeaders, encoded_input)\n \n if \"x-ratelimit-remaining\" in responseHeaders and \"x-ratelimit-limit\" in responseHeaders:\n self.rate_limiting = (int(responseHeaders[\"x-ratelimit-remaining\"]), int(responseHeaders[\"x-ratelimit-limit\"]))\n@@ -187,10 +251,16 @@ def __requestEncode(self, verb, url, parameters, input, encode):\n if \"x-oauth-scopes\" in responseHeaders:\n self.oauth_scopes = responseHeaders[\"x-oauth-scopes\"].split(\", \")\n \n+ self.DEBUG_ON_RESPONSE(status, responseHeaders, output)\n+\n return status, responseHeaders, output\n \n- def __requestRaw(self, verb, url, requestHeaders, input):\n- cnx = self.__createConnection()\n+ def __requestRaw(self, cnx, verb, url, requestHeaders, input):\n+ if cnx is None:\n+ cnx = self.__createConnection()\n+ else:\n+ assert cnx == \"status\"\n+ cnx = self.__httpsConnectionClass(\"status.github.com\", 443)\n cnx.request(\n verb,\n url,\n@@ -244,7 +314,7 @@ def __createConnection(self):\n kwds[\"strict\"] = True # Useless in Python3, would generate a deprecation warning\n if atLeastPython26: # pragma no branch (Branch useful only with Python 2.5)\n kwds[\"timeout\"] = self.__timeout # Did not exist before Python2.6\n- return self.__connectionClass(host=self.__hostname, port=self.__port, **kwds)\n+ return self.__connectionClass(self.__hostname, self.__port, **kwds)\n \n def __log(self, verb, url, requestHeaders, input, status, responseHeaders, output):\n logger = logging.getLogger(__name__)"},{"sha":"6c117241297b8cc312ef45fa6240453e35ca36ed","filename":"github/Status.py","status":"added","additions":56,"deletions":0,"changes":56,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Status.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Status.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Status.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,56 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+import github.GithubObject\n+\n+\n+class Status(github.GithubObject.NonCompletableGithubObject):\n+ \"\"\"\n+ This class represents status as defined in https://status.github.com/api\n+ \"\"\"\n+\n+ @property\n+ def status(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ return self._NoneIfNotSet(self._status)\n+\n+ @property\n+ def last_updated(self):\n+ \"\"\"\n+ :type: datetime.datetime\n+ \"\"\"\n+ return self._NoneIfNotSet(self._last_updated)\n+\n+ def _initAttributes(self):\n+ self._status = github.GithubObject.NotSet\n+ self._last_updated = github.GithubObject.NotSet\n+\n+ def _useAttributes(self, attributes):\n+ if \"status\" in attributes: # pragma no branch\n+ assert attributes[\"status\"] is None or isinstance(attributes[\"status\"], (str, unicode)), attributes[\"status\"]\n+ self._status = attributes[\"status\"]\n+ if \"last_updated\" in attributes: # pragma no branch\n+ assert attributes[\"last_updated\"] is None or isinstance(attributes[\"last_updated\"], (str, unicode)), attributes[\"last_updated\"]\n+ self._last_updated = self._parseDatetime(attributes[\"last_updated\"])"},{"sha":"266e1b05cc4f1b1298b6f56eae34e58ad9be871e","filename":"github/StatusMessage.py","status":"added","additions":66,"deletions":0,"changes":66,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/StatusMessage.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/StatusMessage.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/StatusMessage.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,66 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+import github.GithubObject\n+\n+\n+class StatusMessage(github.GithubObject.NonCompletableGithubObject):\n+ \"\"\"\n+ This class represents status messages as defined in https://status.github.com/api\n+ \"\"\"\n+\n+ @property\n+ def body(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ return self._NoneIfNotSet(self._body)\n+\n+ @property\n+ def status(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ return self._NoneIfNotSet(self._status)\n+\n+ @property\n+ def created_on(self):\n+ \"\"\"\n+ :type: datetime.datetime\n+ \"\"\"\n+ return self._NoneIfNotSet(self._created_on)\n+\n+ def _initAttributes(self):\n+ self._status = github.GithubObject.NotSet\n+ self._created_on = github.GithubObject.NotSet\n+\n+ def _useAttributes(self, attributes):\n+ if \"body\" in attributes: # pragma no branch\n+ assert attributes[\"body\"] is None or isinstance(attributes[\"body\"], (str, unicode)), attributes[\"body\"]\n+ self._body = attributes[\"body\"]\n+ if \"status\" in attributes: # pragma no branch\n+ assert attributes[\"status\"] is None or isinstance(attributes[\"status\"], (str, unicode)), attributes[\"status\"]\n+ self._status = attributes[\"status\"]\n+ if \"created_on\" in attributes: # pragma no branch\n+ assert attributes[\"created_on\"] is None or isinstance(attributes[\"created_on\"], (str, unicode)), attributes[\"created_on\"]\n+ self._created_on = self._parseDatetime(attributes[\"created_on\"])"},{"sha":"890c1a02366be9fd71e36b90084c7dbd624eb2c0","filename":"github/Tag.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Tag.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Tag.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Tag.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -71,7 +72,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"commit\" in attributes: # pragma no branch\n assert attributes[\"commit\"] is None or isinstance(attributes[\"commit\"], dict), attributes[\"commit\"]\n- self._commit = None if attributes[\"commit\"] is None else github.Commit.Commit(self._requester, attributes[\"commit\"], completed=False)\n+ self._commit = None if attributes[\"commit\"] is None else github.Commit.Commit(self._requester, self._headers, attributes[\"commit\"], completed=False)\n if \"name\" in attributes: # pragma no branch\n assert attributes[\"name\"] is None or isinstance(attributes[\"name\"], (str, unicode)), attributes[\"name\"]\n self._name = attributes[\"name\"]"},{"sha":"9b687d8027104bcccf49f6b23d129b94cd963eec","filename":"github/Team.py","status":"modified","additions":9,"deletions":23,"changes":32,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Team.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Team.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Team.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -93,9 +94,7 @@ def add_to_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n \n def add_to_repos(self, repo):\n@@ -107,9 +106,7 @@ def add_to_repos(self, repo):\n assert isinstance(repo, github.Repository.Repository), repo\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/repos/\" + repo._identity,\n- None,\n- None\n+ self.url + \"/repos/\" + repo._identity\n )\n \n def delete(self):\n@@ -119,9 +116,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, name, permission=github.GithubObject.NotSet):\n@@ -141,8 +136,7 @@ def edit(self, name, permission=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -179,9 +173,7 @@ def has_in_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n return status == 204\n \n@@ -194,9 +186,7 @@ def has_in_repos(self, repo):\n assert isinstance(repo, github.Repository.Repository), repo\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/repos/\" + repo._identity,\n- None,\n- None\n+ self.url + \"/repos/\" + repo._identity\n )\n return status == 204\n \n@@ -209,9 +199,7 @@ def remove_from_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n \n def remove_from_repos(self, repo):\n@@ -223,9 +211,7 @@ def remove_from_repos(self, repo):\n assert isinstance(repo, github.Repository.Repository), repo\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/repos/\" + repo._identity,\n- None,\n- None\n+ self.url + \"/repos/\" + repo._identity\n )\n \n @property"},{"sha":"9ca0133be4c77ff5720473de5618c97312d6d7e5","filename":"github/UserKey.py","status":"modified","additions":3,"deletions":5,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/UserKey.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/UserKey.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/UserKey.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -79,9 +80,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet):\n@@ -101,8 +100,7 @@ def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet)\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n "},{"sha":"4ddefece6ae21f29c76934cbd1ed7f122907ec1e","filename":"github/tests/AllTests.py","status":"modified","additions":4,"deletions":0,"changes":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/AllTests.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/AllTests.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/AllTests.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -56,6 +56,7 @@\n from RateLimiting import *\n from Repository import *\n from RepositoryKey import *\n+from Status import *\n from Tag import *\n from Team import *\n from UserKey import *\n@@ -79,3 +80,6 @@\n # from Issue142 import * # Deactivated for Travis-CI because Github has lowered the rate limitations\n from Issue158 import *\n from Issue174 import *\n+\n+from ConditionalRequestUpdate import ConditionalRequestUpdate\n+from Persistence import Persistence"},{"sha":"bfd3f87df527126bffa6c10c78cbb7d790e54542","filename":"github/tests/ConditionalRequestUpdate.py","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ConditionalRequestUpdate.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ConditionalRequestUpdate.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ConditionalRequestUpdate.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,43 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 AKFish #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+# #193: Line endings should be linux style\n+\n+import Framework\n+import github\n+\n+\n+class ConditionalRequestUpdate(Framework.TestCase):\n+ def setUp(self):\n+ Framework.TestCase.setUp(self)\n+ self.repo = self.g.get_repo(\"akfish/PyGithub\")\n+\n+ def testDidNotUpdate(self):\n+ self.assertFalse(self.repo.update(), msg=\"The repo is not changes. But update() != False\")\n+\n+ def testDidUpdate(self):\n+ self.assertTrue(self.repo.update(), msg=\"The repo should be changed by now. But update() != True\")\n+\n+ def testUpdateObjectWithoutEtag(self):\n+ r = self.g.get_repo(\"jacquev6/PyGithub\")\n+ self.assertTrue(r.update())"},{"sha":"24e814b49afae222e8ac8a79ee5696166a76abc1","filename":"github/tests/Framework.py","status":"modified","additions":17,"deletions":0,"changes":17,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Framework.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Framework.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Framework.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -244,8 +245,24 @@ def assertListKeyBegin(self, elements, key, expectedKeys):\n \n \n class TestCase(BasicTestCase):\n+ def doCheckFrame(self, obj, frame):\n+ if obj._headers == {} and frame is None:\n+ return\n+ if obj._headers is None and frame == {}:\n+ return\n+ self.assertEqual(obj._headers, frame[2])\n+\n+ def getFrameChecker(self):\n+ return lambda requester, obj, frame: self.doCheckFrame(obj, frame)\n+\n def setUp(self):\n BasicTestCase.setUp(self)\n+\n+ # Set up frame debugging\n+ github.GithubObject.GithubObject.setCheckAfterInitFlag(True)\n+ github.Requester.Requester.setDebugFlag(True)\n+ github.Requester.Requester.setOnCheckMe(self.getFrameChecker())\n+\n self.g = github.Github(self.login, self.password)\n \n "},{"sha":"d74dbac39717bba9476ca39070f6f0beced70578","filename":"github/tests/Gist.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Gist.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Gist.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Gist.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -108,12 +108,12 @@ def testStarring(self):\n self.assertFalse(self.gist.is_starred())\n \n def testFork(self):\n- gist = self.g.get_gist(\"2729818\") # Random gist\n+ gist = self.g.get_gist(\"6296553\") # Random gist\n myGist = gist.create_fork()\n- self.assertEqual(myGist.id, \"2729865\")\n+ self.assertEqual(myGist.id, \"6296732\")\n self.assertEqual(myGist.fork_of, None) # WTF\n- sameGist = self.g.get_gist(\"2729865\")\n- self.assertEqual(sameGist.fork_of.id, \"2729818\")\n+ sameGist = self.g.get_gist(\"6296732\")\n+ self.assertEqual(sameGist.fork_of.id, \"6296553\")\n \n def testDelete(self):\n self.gist.delete()"},{"sha":"dec6a80595e541d50720527d16f752d44ef4acf3","filename":"github/tests/Github_.py","status":"modified","additions":6,"deletions":0,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Github_.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Github_.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Github_.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -128,3 +128,9 @@ def testGetUsers(self):\n \n def testGetUsersSince(self):\n self.assertListKeyBegin(self.g.get_users(since=1000), lambda u: u.login, [\"sbecker\"])\n+\n+ def testGetRepos(self):\n+ self.assertListKeyBegin(self.g.get_repos(), lambda r: r.name, [\"grit\", \"merb-core\", \"rubinius\", \"god\", \"jsawesome\", \"jspec\", \"exception_logger\", \"ambition\"])\n+\n+ def testGetReposSince(self):\n+ self.assertListKeyBegin(self.g.get_repos(since=1000), lambda r: r.name, [\"jquery-humanize-messages-plugin\", \"4slicer\", \"fixture-scenarios\", \"mongrel_proctitle\", \"rails-plugins\"])"},{"sha":"5a56bd195039b7f2077fa19952af9bcb5f6c95d1","filename":"github/tests/NamedUser.py","status":"modified","additions":4,"deletions":0,"changes":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/NamedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/NamedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/NamedUser.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -109,6 +109,10 @@ def testGetFollowers(self):\n def testGetFollowing(self):\n self.assertListKeyEqual(self.user.get_following(), lambda f: f.login, [\"nvie\", \"schacon\", \"jamis\", \"chad\", \"unclebob\", \"dabrahams\", \"jnorthrup\", \"brugidou\", \"regisb\", \"walidk\", \"tanzilli\", \"fjardon\", \"r3c\", \"sdanzan\", \"vineus\", \"cjuniet\", \"gturri\", \"ant9000\", \"asquini\", \"claudyus\", \"jardon-u\", \"s-bernard\", \"kamaradclimber\", \"Lyloa\"])\n \n+ def testHasInFollowing(self):\n+ nvie = self.g.get_user(\"nvie\")\n+ self.assertTrue(self.user.has_in_following(nvie))\n+\n def testGetOrgs(self):\n self.assertListKeyEqual(self.user.get_orgs(), lambda o: o.login, [\"BeaverSoftware\"])\n "},{"sha":"300e91744c7c62d950b6e5eb91ea8e697b3f570b","filename":"github/tests/Persistence.py","status":"added","additions":55,"deletions":0,"changes":55,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Persistence.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Persistence.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Persistence.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,55 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+import Framework\n+import github\n+\n+if Framework.atLeastPython26:\n+ from io import BytesIO as IO\n+else:\n+ from StringIO import StringIO as IO\n+\n+\n+class Persistence(Framework.TestCase):\n+ def setUp(self):\n+ Framework.TestCase.setUp(self)\n+ self.repo = self.g.get_repo(\"akfish/PyGithub\")\n+\n+ self.dumpedRepo = IO()\n+ self.g.dump(self.repo, self.dumpedRepo)\n+ self.dumpedRepo.seek(0)\n+\n+ def tearDown(self):\n+ self.dumpedRepo.close()\n+\n+ def testLoad(self):\n+ loadedRepo = self.g.load(self.dumpedRepo)\n+ self.assertTrue(isinstance(loadedRepo, github.Repository.Repository))\n+ self.assertTrue(loadedRepo._requester is self.repo._requester)\n+ self.assertTrue(loadedRepo.owner._requester is self.repo._requester)\n+ self.assertEqual(loadedRepo.name, \"PyGithub\")\n+ self.assertEqual(loadedRepo.url, \"https://api.github.com/repos/akfish/PyGithub\")\n+\n+ def testLoadAndUpdate(self):\n+ loadedRepo = self.g.load(self.dumpedRepo)\n+ self.assertTrue(loadedRepo.update())"},{"sha":"dfc62ba258a155c9b40432ec67a51b8b8822ec73","filename":"github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '13698'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:09:11 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"8600bedcb7fed1d8065e1693e05529ce\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:13:08 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377140429')]\n+{\"id\":12156762,\"name\":\"PyGithub\",\"full_name\":\"akfish/PyGithub\",\"owner\":{\"login\":\"akfish\",\"id\":922715,\"avatar_url\":\"https://1.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png\",\"gravatar_id\":\"12a1b44d4e5c19cee59618084602b112\",\"url\":\"https://api.github.com/users/akfish\",\"html_url\":\"https://github.com/akfish\",\"followers_url\":\"https://api.github.com/users/akfish/followers\",\"following_url\":\"https://api.github.com/users/akfish/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/akfish/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/akfish/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/akfish/subscriptions\",\"organizations_url\":\"https://api.github.com/users/akfish/orgs\",\"repos_url\":\"https://api.github.com/users/akfish/repos\",\"events_url\":\"https://api.github.com/users/akfish/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/akfish/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/akfish/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":true,\"url\":\"https://api.github.com/repos/akfish/PyGithub\",\"forks_url\":\"https://api.github.com/repos/akfish/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/akfish/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/akfish/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/akfish/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/akfish/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/akfish/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/akfish/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/akfish/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/akfish/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/akfish/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/akfish/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/akfish/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/akfish/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/akfish/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/akfish/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/akfish/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/akfish/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/akfish/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/akfish/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/akfish/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/akfish/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/akfish/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/akfish/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/akfish/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/akfish/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/akfish/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/akfish/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/akfish/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/akfish/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/akfish/PyGithub/labels{/name}\",\"created_at\":\"2013-08-16T10:56:11Z\",\"updated_at\":\"2013-08-22T02:09:11Z\",\"pushed_at\":\"2013-08-22T02:09:09Z\",\"git_url\":\"git://github.com/akfish/PyGithub.git\",\"ssh_url\":\"git@github.com:akfish/PyGithub.git\",\"clone_url\":\"https://github.com/akfish/PyGithub.git\",\"svn_url\":\"https://github.com/akfish/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":6736,\"watchers_count\":0,\"language\":\"Python\",\"has_issues\":false,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":0,\"mirror_url\":null,\"open_issues_count\":0,\"forks\":0,\"open_issues\":0,\"watchers\":0,\"master_branch\":\"master\",\"default_branch\":\"master\",\"permissions\":{\"admin\":true,\"push\":true,\"pull\":true},\"network_count\":70,\"parent\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"},\"source\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"}}\n+"},{"sha":"025aee8c0f6dea08b255b2229fd018af435b9d2a","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'If-None-Match': '\"8600bedcb7fed1d8065e1693e05529ce\"', 'User-Agent': 'PyGithub/Python', 'Authorization': 'Basic login_and_password_removed', 'If-Modified-Since': 'Thu, 22 Aug 2013 02:09:11 GMT'}\n+null\n+304\n+[('status', '304 Not Modified'), ('x-ratelimit-remaining', '4988'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept-Encoding'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:09:11 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"8600bedcb7fed1d8065e1693e05529ce\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:13:10 GMT'), ('access-control-allow-origin', '*'), ('x-ratelimit-reset', '1377140429')]\n+\n+"},{"sha":"b6d8aeec9b3c663cfe561eb2513a514f10011673","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'If-None-Match': '\"8600bedcb7fed1d8065e1693e05529ce\"', 'User-Agent': 'PyGithub/Python', 'Authorization': 'Basic login_and_password_removed', 'If-Modified-Since': 'Thu, 22 Aug 2013 02:09:11 GMT'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '13712'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:14:54 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"ef281ef0e821c18f80da36902727160b\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:15:01 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377140429')]\n+{\"id\":12156762,\"name\":\"PyGithub\",\"full_name\":\"akfish/PyGithub\",\"owner\":{\"login\":\"akfish\",\"id\":922715,\"avatar_url\":\"https://0.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png\",\"gravatar_id\":\"12a1b44d4e5c19cee59618084602b112\",\"url\":\"https://api.github.com/users/akfish\",\"html_url\":\"https://github.com/akfish\",\"followers_url\":\"https://api.github.com/users/akfish/followers\",\"following_url\":\"https://api.github.com/users/akfish/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/akfish/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/akfish/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/akfish/subscriptions\",\"organizations_url\":\"https://api.github.com/users/akfish/orgs\",\"repos_url\":\"https://api.github.com/users/akfish/repos\",\"events_url\":\"https://api.github.com/users/akfish/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/akfish/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/akfish/PyGithub\",\"description\":\"Python library implementing the full Github API v3 - AKFish Fork\",\"fork\":true,\"url\":\"https://api.github.com/repos/akfish/PyGithub\",\"forks_url\":\"https://api.github.com/repos/akfish/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/akfish/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/akfish/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/akfish/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/akfish/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/akfish/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/akfish/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/akfish/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/akfish/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/akfish/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/akfish/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/akfish/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/akfish/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/akfish/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/akfish/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/akfish/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/akfish/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/akfish/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/akfish/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/akfish/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/akfish/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/akfish/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/akfish/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/akfish/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/akfish/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/akfish/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/akfish/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/akfish/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/akfish/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/akfish/PyGithub/labels{/name}\",\"created_at\":\"2013-08-16T10:56:11Z\",\"updated_at\":\"2013-08-22T02:14:54Z\",\"pushed_at\":\"2013-08-22T02:09:09Z\",\"git_url\":\"git://github.com/akfish/PyGithub.git\",\"ssh_url\":\"git@github.com:akfish/PyGithub.git\",\"clone_url\":\"https://github.com/akfish/PyGithub.git\",\"svn_url\":\"https://github.com/akfish/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":6736,\"watchers_count\":0,\"language\":\"Python\",\"has_issues\":false,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":0,\"mirror_url\":null,\"open_issues_count\":0,\"forks\":0,\"open_issues\":0,\"watchers\":0,\"master_branch\":\"master\",\"default_branch\":\"master\",\"permissions\":{\"admin\":true,\"push\":true,\"pull\":true},\"network_count\":70,\"parent\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"},\"source\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"}}\n+"},{"sha":"6ef154b5c89fc41728599711ada9ac0aa8d36959","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testUpdateObjectWithoutEtag.txt","status":"added","additions":22,"deletions":0,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testUpdateObjectWithoutEtag.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testUpdateObjectWithoutEtag.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/ConditionalRequestUpdate.testUpdateObjectWithoutEtag.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,22 @@\n+https\r\n+GET\r\n+api.github.com\r\n+None\r\n+/repos/jacquev6/PyGithub\r\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\r\n+null\r\n+200\r\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4911'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('date', 'Sun, 27 May 2012 07:17:09 GMT'), ('content-type', 'application/json; charset=utf-8')]\r\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"updated_at\":\"2012-05-27T06:55:28Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\r\n+\r\n+https\r\n+GET\r\n+api.github.com\r\n+None\r\n+/repos/jacquev6/PyGithub\r\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\r\n+null\r\n+200\r\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4911'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('date', 'Sun, 27 May 2012 07:17:09 GMT'), ('content-type', 'application/json; charset=utf-8')]\r\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"updated_at\":\"2012-05-27T06:55:28Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\r\n+\r"},{"sha":"0589aa6c8958061fa31f388fd9d737750bdac50a","filename":"github/tests/ReplayData/Gist.testFork.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Gist.testFork.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Gist.testFork.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Gist.testFork.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,32 +2,32 @@ https\n GET\n api.github.com\n None\n-/gists/2729818\n+/gists/6296553\n {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4970'), ('content-length', '2576'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fda4eb92e9b9a245bccf9efd47857766\"'), ('date', 'Sat, 19 May 2012 07:25:30 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"git_push_url\":\"git@gist.github.com:2729818.git\",\"updated_at\":\"2012-05-19T07:06:08Z\",\"forks\":[],\"url\":\"https://api.github.com/gists/2729818\",\"comments\":0,\"public\":true,\"files\":{\"ror.markdown\":{\"type\":\"text/plain\",\"raw_url\":\"https://gist.github.com/raw/2729818/1284e70f4c16550ef32a26aa4f5f0c78edaa7008/ror.markdown\",\"size\":1076,\"filename\":\"ror.markdown\",\"content\":\"## create user\\n\\nsudo useradd -m username\\nvisudo\\n\\n## delete default user\\n\\nsudo userdel ubuntu\\nsudo rm -Rf ubuntu\\n\\n## setup ssh\\n\\nmkdir ~/.ssh\\nvi /etc/ssh/authorized_keys\\nsudo vi /etc/ssh/sshd_config\\n\\n\\n## install packages\\n\\nsudo apt-get update\\n\\nsudo apt-get install sysv-rc-init git-core apache2-utils wget vim\\nsudo apt-get install mysql-client mysql-server libmysqld-dev\\nsudo apt-get install g++ openssl zlib1g readline-common libyaml-dev libssl-dev zlib1g-dev libxml2-dev libxslt1-dev libjson0-dev libgcc1 libreadline-dev\\n\\n\\n## install nginx\\n\\nwget http://nginx.org/keys/nginx_signing.key\\nsudo apt-key add nginx_signing.key\\n\\n### add /etc/sources.list\\n> \\\"deb http://nginx.org/packages/ubuntu/ lucid nginx\\ndeb-src http://nginx.org/packages/ubuntu/ lucid nginx\\\"\\n\\napt-get update\\napt-get install nginx\\n\\n\\n## setup system\\n\\nsudo sysv-rc-init\\n\\n\\n## install ruby\\n\\ncd /usr/local/src\\nsudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz\\nsudo tar zxvf ruby-1.9.3-p194.tar.gz\\ncd ruby-1.9.3-p194\\nsudo ./configure\\nsudo make && make install\\n\\n\\n## install RoR\\n\\nsudo gem install rails\",\"language\":\"Markdown\"}},\"html_url\":\"https://gist.github.com/2729818\",\"user\":{\"url\":\"https://api.github.com/users/Kechol\",\"gravatar_id\":\"f2a6400b393749ccd9ad3f24d4995f77\",\"login\":\"Kechol\",\"avatar_url\":\"https://secure.gravatar.com/avatar/f2a6400b393749ccd9ad3f24d4995f77?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"id\":625489},\"description\":\"RoR setup in AWS EC2(Ubuntu 12.04 LTS)\",\"created_at\":\"2012-05-19T07:06:08Z\",\"git_pull_url\":\"git://gist.github.com/2729818.git\",\"id\":\"2729818\",\"history\":[{\"url\":\"https://api.github.com/gists/2729818/a655d19a12233e5e5615deb714eae95c433eed57\",\"version\":\"a655d19a12233e5e5615deb714eae95c433eed57\",\"change_status\":{\"deletions\":0,\"additions\":57,\"total\":57},\"committed_at\":\"2012-05-19T07:06:08Z\",\"user\":{\"url\":\"https://api.github.com/users/Kechol\",\"gravatar_id\":\"f2a6400b393749ccd9ad3f24d4995f77\",\"login\":\"Kechol\",\"avatar_url\":\"https://secure.gravatar.com/avatar/f2a6400b393749ccd9ad3f24d4995f77?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"id\":625489}}]}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4966'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '25285'), ('server', 'GitHub.com'), ('last-modified', 'Wed, 21 Aug 2013 16:26:50 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"b96b3895f5da8f5e9533f0db72748a49\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Wed, 21 Aug 2013 16:28:20 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377104997')]\n+{\"url\":\"https://api.github.com/gists/6296553\",\"forks_url\":\"https://api.github.com/gists/6296553/forks\",\"commits_url\":\"https://api.github.com/gists/6296553/commits\",\"id\":\"6296553\",\"git_pull_url\":\"https://gist.github.com/6296553.git\",\"git_push_url\":\"https://gist.github.com/6296553.git\",\"html_url\":\"https://gist.github.com/6296553\",\"files\":{\"GithubAPI.lua\":{\"filename\":\"GithubAPI.lua\",\"type\":\"text/plain\",\"language\":\"Lua\",\"raw_url\":\"https://gist.github.com/raw/6296553/88aafa25fb28e17013054a117354a37f0d78963c/GithubAPI.lua\",\"size\":21229,\"content\":\"-- GithubAPI\\n-- @Author : Hyro Vitaly Protago\\n-- @Version : 1.0.0\\n\\n--[[\\n\\nINFOS :\\n - Cannot delete an anonymous gist\\n]]--\\n\\nGithubAPI = {\\n\\tlocation = \\\"https://api.github.com/\\\",\\n\\ttoken = nil,\\n\\tOAuth = {\\n\\t\\tauthorizations = {}\\n\\t},\\n\\tgist = {\\n\\t\\tlist = {},\\n\\t\\tcomment = {}\\n\\t},\\n\\tgithub = {}\\n}\\n\\n----------------------------------------------------------------------------\\n------------------------------ Github API ----------------------------------\\n----------------------------------------------------------------------------\\n\\n--- Authentication ---\\n\\n--[[ Scopes --\\n\\nScopes let you specify exactly what type of access you need. Scopes limit access for OAuth tokens.\\nThey do not grant any additional permission beyond that which the user already has.\\n\\nFor the web flow, requested scopes will be displayed to the user on the authorize form.\\n\\nCheck headers to see what OAuth scopes you have, and what the API action accepts.\\n\\n~~~\\n$ curl -H \\\"Authorization: token OAUTH-TOKEN\\\" https://api.github.com/users/technoweenie -I\\nHTTP/1.1 200 OK\\nX-OAuth-Scopes: repo, user\\nX-Accepted-OAuth-Scopes: user\\nX-OAuth-Scopes lists the scopes your token has authorized. X-Accepted-OAuth-Scopes lists the scopes that the action checks for.\\n~~~\\n\\n- (no scope)\\npublic read-only access (includes public user profile info, public repo info, and gists).\\n- user\\nRead/write access to profile info only. Note: this scope includes user:email and user:follow.\\n- user:email\\nRead access to a user’s email addresses.\\n- user:follow\\nAccess to follow or unfollow other users.\\n- public_repo\\nRead/write access to public repos and organizations.\\n- repo\\nRead/write access to public and private repos and organizations.\\n- repo:status\\nRead/write access to public and private repository commit statuses.\\nThis scope is only necessary to grant other users or services access to private repository commit statuses without granting access to the code.\\nThe repo and public_repo scopes already include access to commit status for private and public repositories respectively.\\n- delete_repo\\nDelete access to adminable repositories.\\n- notifications\\nRead access to a user’s notifications. repo is accepted too.\\n- gist\\nWrite access to gists.\\n\\nNOTE: Your application can request the scopes in the initial redirection. You can specify multiple scopes by separating them by a comma.\\n~~~\\nhttps://github.com/login/oauth/authorize?\\n client_id=...&\\n scope=user,public_repo\\n~~~\\n]]--\\n\\n-- Redirect users to request GitHub access --\\nfunction GithubAPI.OAuth.getToken(client_id, scope, callback)\\n\\tGithubAPI.http_request(\\\"https://github.com/login/oauth/authorize?client_id=\\\"..client_id..\\\"&scope=\\\"..scope, function(data, status, headers)\\n\\t\\tGithubAPI.OAuth._getToken(client_id, client_secret, data, callback)\\n\\tend, nil, true)\\nend\\n-- GitHub redirects back to your site --\\nfunction GithubAPI.OAuth._getToken(client_id, client_secret, code, callback)\\n\\tGithubAPI.http_request(\\\"https://github.com/login/oauth/access_token\\\", callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tclient_id = client_id,\\n\\t\\t\\tclient_secret = client_secret,\\n\\t\\t\\tcode = code\\n\\t\\t}\\n\\t}, true)\\nend\\n\\n-- List your authorizations --\\nfunction GithubAPI.OAuth.authorizations.list(callback)\\n\\tGithubAPI.http_request(\\\"authorizations\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nLink: ; rel=\\\"next\\\",\\n ; rel=\\\"last\\\"\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single authorization --\\nfunction GithubAPI.OAuth.authorizations.get(id, callback)\\n\\tGithubAPI.http_request(\\\"authorizations/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n}\\n]]--\\n\\n-- Create a new authorization --\\nfunction GithubAPI.OAuth.authorizations.create(callback, scopes, note, note_url, client_id, client_secret)\\n\\tGithubAPI.http_request(\\\"authorizations/\\\", callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tscopes = scopes,\\n\\t\\t\\tnote = note,\\n\\t\\t\\tnote_url = note_url,\\n\\t\\t\\tclient_id = client_id,\\n\\t\\t\\tclient_secret = client_secret\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\nscopes\\nOptional array - A list of scopes that this authorization is in.\\n\\nnote\\nOptional string - A note to remind you what the OAuth token is for.\\n\\nnote_url\\nOptional string - A URL to remind you what app the OAuth token is for.\\n\\nclient_id\\nOptional String - The 20 character OAuth app client key for which to create the token.\\n\\nclient_secret\\nOptional String - The 40 character OAuth app client secret for which to create the token.\\n~~~\\n{\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"note\\\": \\\"admin script\\\"\\n}\\n~~~\\n]]--\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/authorizations/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n}\\n]]--\\n\\n-- TODO\\n-- Update\\n-- Check\\n-- Delete\\n\\n--- GISTS ---\\n\\n-- List gists --\\nfunction GithubAPI.gist.list.user(user, callback)\\n\\tGithubAPI.http_request(\\\"users/\\\"..user..\\\"/gists\\\", callback)\\nend\\nfunction GithubAPI.gist.list.all(callback) -- return all public gists if called anonymously\\n\\tGithubAPI.http_request(\\\"gists\\\", callback)\\nend\\nfunction GithubAPI.gist.list.allPublic(callback)\\n\\tGithubAPI.http_request(\\\"gists/public\\\", callback)\\nend\\nfunction GithubAPI.gist.list.starred(callback)\\n\\tGithubAPI.http_request(\\\"gists/starred\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nLink: ; rel=\\\"next\\\",\\n ; rel=\\\"last\\\"\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single gist --\\nfunction GithubAPI.gist.get(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Create a gist --\\nfunction GithubAPI.gist.create(public, files, callback ,description)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tpublic = public,\\n\\t\\t\\tfiles = files,\\n\\t\\t\\tdescription = description\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"description\\\": \\\"the description for this gist\\\",\\n \\\"public\\\": true,\\n \\\"files\\\": {\\n \\\"file1.txt\\\": {\\n \\\"content\\\": \\\"String file contents\\\"\\n }\\n }\\n}\\n]]--\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Edit a gist --\\nfunction GithubAPI.gist.edit(id, files, callback, description)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {\\n\\t\\tmethod = \\\"PATCH\\\",\\n\\t\\tdata = {\\n\\t\\t\\tid = id,\\n\\t\\t\\tfiles = files,\\n\\t\\t\\tdescription = description\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"description\\\": \\\"the description for this gist\\\",\\n \\\"files\\\": {\\n \\\"file1.txt\\\": {\\n \\\"content\\\": \\\"updated file contents\\\"\\n },\\n \\\"old_name.txt\\\": {\\n \\\"filename\\\": \\\"new_name.txt\\\",\\n \\\"content\\\": \\\"modified contents\\\"\\n },\\n \\\"new_file.txt\\\": {\\n \\\"content\\\": \\\"a new file\\\"\\n },\\n \\\"delete_this_file.txt\\\": null\\n }\\n}\\n]]--\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Star a gist --\\nfunction GithubAPI.gist.star(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback, {method=\\\"PUT\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Unstar a gist --\\nfunction GithubAPI.gist.unstar(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback, {method=\\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Check if a gist is starred --\\nfunction GithubAPI.gist.checkStar(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback)\\nend\\n\\n--[[\\n-- Response if gist is starred --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n\\n-- Response if gist is not starred --\\nStatus: 404 Not Found\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Fork a gist --\\nfunction GithubAPI.gist.fork(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/forks\\\", callback, {method=\\\"POST\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/2\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n}\\n]]--\\n\\n-- Delete a gist --\\nfunction GithubAPI.gist.delete(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {method=\\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n--- GISTS COMMENTS ---\\n\\n-- List comments on a gist --\\nfunction GithubAPI.gist.comment.list(gist_id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single comment --\\nfunction GithubAPI.gist.comment.get(gist_id, id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Create a comment --\\nfunction GithubAPI.gist.comment.create(gist_id, body, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tbody = body\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\"\\n}\\n]]--\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/comments/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Edit a comment --\\nfunction GithubAPI.gist.comment.edit(gist_id, id, body, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {\\n\\t\\tmethod = \\\"PATCH\\\",\\n\\t\\tdata = {\\n\\t\\t\\tbody = body\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\"\\n}\\n]]--\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Delete a comment --\\nfunction GithubAPI.gist.comment.delete(gist_id, id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {method = \\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n----------------------------------------------------------------------------\\n-------------------------------- TOOLS -------------------------------------\\n----------------------------------------------------------------------------\\n\\nfunction GithubAPI.http_request(url, callback, opts, fullUrl)\\n\\topts = opts or {}\\n\\t-- if GithubAPI.token then opts.headers = TOKEN BEARER\\n\\tif opts.data then opts.data = json.encode(opts.data) end\\n\\n\\tlocal _url\\n\\tif (fullUrl) then _url = url else _url = GithubAPI.location .. url end\\n\\n\\thttp.request(_url, function(data, status, headers)\\n\\t\\tif (status == 500) then error(\\\"Github: Internal Server Error ...\\\") end\\n\\t\\tdata = json.decode(data)\\n\\t\\tcallback(data, status, headers)\\n\\tend, alert, opts)\\nend\\n\\nfunction GithubAPI.explode(div,str) -- credit: http://richard.warburton.it\\n if (div=='') then return false end\\n local pos,arr = 0,{}\\n for st,sp in function() return string.find(str,div,pos,true) end do\\n table.insert(arr,string.sub(str,pos,st-1))\\n pos = sp + 1\\n end\\n table.insert(arr,string.sub(str,pos))\\n return arr\\nend\\n\\n-- GITHUB TIMESTAMP (YYYY-MM-DDTHH:MM:SSZ) to os.time\\nfunction GithubAPI.gtimestamp(githubTime)\\n\\tgithubTime = githubTime:sub(1, #githubTime-1) -- remove Z\\n\\tgithubTime = GithubAPI.explode(\\\"T\\\", githubTime)\\n\\tgithubTime[1] = GithubAPI.explode(\\\"-\\\", githubTime[1])\\n\\tgithubTime[2] = GithubAPI.explode(\\\":\\\", githubTime[2])\\n\\treturn os.time({\\n\\t\\tyear = tonumber(githubTime[1][1]),\\n\\t\\tmonth = tonumber(githubTime[1][2]),\\n\\t\\tday = tonumber(githubTime[1][3]),\\n\\t\\thour = tonumber(githubTime[2][1]),\\n\\t\\tmin = tonumber(githubTime[2][2]),\\n\\t\\tsec = tonumber(githubTime[2][3])\\n\\t})\\nend\"}},\"public\":true,\"created_at\":\"2013-08-21T16:12:27Z\",\"updated_at\":\"2013-08-21T16:26:50Z\",\"description\":\"Github API\",\"comments\":0,\"user\":{\"login\":\"HyroVitalyProtago\",\"id\":3470988,\"avatar_url\":\"https://2.gravatar.com/avatar/ed59562b231a649345f38703948f76f4?d=https%3A%2F%2Fidenticons.github.com%2F6582cb986b7a730b12f7c18dfcc865f0.png\",\"gravatar_id\":\"ed59562b231a649345f38703948f76f4\",\"url\":\"https://api.github.com/users/HyroVitalyProtago\",\"html_url\":\"https://github.com/HyroVitalyProtago\",\"followers_url\":\"https://api.github.com/users/HyroVitalyProtago/followers\",\"following_url\":\"https://api.github.com/users/HyroVitalyProtago/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/HyroVitalyProtago/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/HyroVitalyProtago/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/HyroVitalyProtago/subscriptions\",\"organizations_url\":\"https://api.github.com/users/HyroVitalyProtago/orgs\",\"repos_url\":\"https://api.github.com/users/HyroVitalyProtago/repos\",\"events_url\":\"https://api.github.com/users/HyroVitalyProtago/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/HyroVitalyProtago/received_events\",\"type\":\"User\"},\"comments_url\":\"https://api.github.com/gists/6296553/comments\",\"forks\":[],\"history\":[{\"user\":null,\"version\":\"c464aecd7fea16684e935607eeea7ae4f8caa0e2\",\"committed_at\":\"2013-08-21T16:12:27Z\",\"change_status\":{\"total\":793,\"additions\":793,\"deletions\":0},\"url\":\"https://api.github.com/gists/6296553/c464aecd7fea16684e935607eeea7ae4f8caa0e2\"}]}\n \n https\n POST\n api.github.com\n None\n-/gists/2729818/fork\n+/gists/6296553/forks\n {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n null\n 201\n-[('status', '201 Created'), ('x-ratelimit-remaining', '4969'), ('content-length', '873'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"502531cd2afdff81b572c8565b17f601\"'), ('date', 'Sat, 19 May 2012 07:25:30 GMT'), ('content-type', 'application/json; charset=utf-8'), ('location', 'https://api.github.com/gists/2729865')]\n-{\"updated_at\":\"2012-05-19T07:25:30Z\",\"url\":\"https://api.github.com/gists/2729865\",\"comments\":0,\"public\":true,\"git_pull_url\":\"git://gist.github.com/2729865.git\",\"files\":{\"ror.markdown\":{\"raw_url\":\"https://gist.github.com/raw/2729865/1284e70f4c16550ef32a26aa4f5f0c78edaa7008/ror.markdown\",\"type\":\"text/plain\",\"size\":1076,\"filename\":\"ror.markdown\",\"language\":\"Markdown\"}},\"html_url\":\"https://gist.github.com/2729865\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"login\":\"jacquev6\",\"id\":327146},\"description\":\"RoR setup in AWS EC2(Ubuntu 12.04 LTS)\",\"created_at\":\"2012-05-19T07:25:30Z\",\"git_push_url\":\"git@gist.github.com:2729865.git\",\"id\":\"2729865\"}\n+[('status', '201 Created'), ('x-ratelimit-remaining', '4965'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('cache-control', 'max-age=0, private, must-revalidate'), ('content-length', '1510'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('location', 'https://api.github.com/gists/6296732'), ('access-control-allow-credentials', 'true'), ('date', 'Wed, 21 Aug 2013 16:28:24 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('etag', '\"ceb086d4f395719d1124cade5cedbfd4\"'), ('x-ratelimit-reset', '1377104997')]\n+{\"url\":\"https://api.github.com/gists/6296732\",\"forks_url\":\"https://api.github.com/gists/6296732/forks\",\"commits_url\":\"https://api.github.com/gists/6296732/commits\",\"id\":\"6296732\",\"git_pull_url\":\"https://gist.github.com/6296732.git\",\"git_push_url\":\"https://gist.github.com/6296732.git\",\"html_url\":\"https://gist.github.com/6296732\",\"files\":{},\"public\":true,\"created_at\":\"2013-08-21T16:28:24Z\",\"updated_at\":\"2013-08-21T16:28:24Z\",\"description\":\"Github API\",\"comments\":0,\"user\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://1.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"comments_url\":\"https://api.github.com/gists/6296732/comments\"}\n \n https\n GET\n api.github.com\n None\n-/gists/2729865\n+/gists/6296732\n {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4966'), ('content-length', '3460'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"e829012f18db493a69740de762186eb5\"'), ('date', 'Sat, 19 May 2012 07:26:54 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"description\":\"RoR setup in AWS EC2(Ubuntu 12.04 LTS)\",\"comments\":0,\"updated_at\":\"2012-05-19T07:25:30Z\",\"public\":true,\"git_pull_url\":\"git://gist.github.com/2729865.git\",\"history\":[{\"user\":{\"url\":\"https://api.github.com/users/Kechol\",\"avatar_url\":\"https://secure.gravatar.com/avatar/f2a6400b393749ccd9ad3f24d4995f77?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"f2a6400b393749ccd9ad3f24d4995f77\",\"login\":\"Kechol\",\"id\":625489},\"change_status\":{\"total\":57,\"deletions\":0,\"additions\":57},\"committed_at\":\"2012-05-19T07:06:08Z\",\"version\":\"a655d19a12233e5e5615deb714eae95c433eed57\",\"url\":\"https://api.github.com/gists/2729865/a655d19a12233e5e5615deb714eae95c433eed57\"}],\"git_push_url\":\"git@gist.github.com:2729865.git\",\"url\":\"https://api.github.com/gists/2729865\",\"fork_of\":{\"user\":{\"url\":\"https://api.github.com/users/Kechol\",\"avatar_url\":\"https://secure.gravatar.com/avatar/f2a6400b393749ccd9ad3f24d4995f77?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"f2a6400b393749ccd9ad3f24d4995f77\",\"login\":\"Kechol\",\"id\":625489},\"description\":\"RoR setup in AWS EC2(Ubuntu 12.04 LTS)\",\"comments\":0,\"updated_at\":\"2012-05-19T07:06:08Z\",\"public\":true,\"git_pull_url\":\"git://gist.github.com/2729818.git\",\"git_push_url\":\"git@gist.github.com:2729818.git\",\"url\":\"https://api.github.com/gists/2729818\",\"html_url\":\"https://gist.github.com/2729818\",\"id\":\"2729818\",\"created_at\":\"2012-05-19T07:06:08Z\",\"files\":{\"ror.markdown\":{\"type\":\"text/plain\",\"size\":1076,\"filename\":\"ror.markdown\",\"raw_url\":\"https://gist.github.com/raw/2729818/1284e70f4c16550ef32a26aa4f5f0c78edaa7008/ror.markdown\",\"language\":\"Markdown\"}}},\"html_url\":\"https://gist.github.com/2729865\",\"id\":\"2729865\",\"forks\":[],\"created_at\":\"2012-05-19T07:25:30Z\",\"files\":{\"ror.markdown\":{\"content\":\"## create user\\n\\nsudo useradd -m username\\nvisudo\\n\\n## delete default user\\n\\nsudo userdel ubuntu\\nsudo rm -Rf ubuntu\\n\\n## setup ssh\\n\\nmkdir ~/.ssh\\nvi /etc/ssh/authorized_keys\\nsudo vi /etc/ssh/sshd_config\\n\\n\\n## install packages\\n\\nsudo apt-get update\\n\\nsudo apt-get install sysv-rc-init git-core apache2-utils wget vim\\nsudo apt-get install mysql-client mysql-server libmysqld-dev\\nsudo apt-get install g++ openssl zlib1g readline-common libyaml-dev libssl-dev zlib1g-dev libxml2-dev libxslt1-dev libjson0-dev libgcc1 libreadline-dev\\n\\n\\n## install nginx\\n\\nwget http://nginx.org/keys/nginx_signing.key\\nsudo apt-key add nginx_signing.key\\n\\n### add /etc/sources.list\\n> \\\"deb http://nginx.org/packages/ubuntu/ lucid nginx\\ndeb-src http://nginx.org/packages/ubuntu/ lucid nginx\\\"\\n\\napt-get update\\napt-get install nginx\\n\\n\\n## setup system\\n\\nsudo sysv-rc-init\\n\\n\\n## install ruby\\n\\ncd /usr/local/src\\nsudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz\\nsudo tar zxvf ruby-1.9.3-p194.tar.gz\\ncd ruby-1.9.3-p194\\nsudo ./configure\\nsudo make && make install\\n\\n\\n## install RoR\\n\\nsudo gem install rails\",\"type\":\"text/plain\",\"size\":1076,\"filename\":\"ror.markdown\",\"raw_url\":\"https://gist.github.com/raw/2729865/1284e70f4c16550ef32a26aa4f5f0c78edaa7008/ror.markdown\",\"language\":\"Markdown\"}}}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4964'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '26806'), ('server', 'GitHub.com'), ('last-modified', 'Wed, 21 Aug 2013 16:28:24 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"f2916c23435522156274bed022a322e7\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Wed, 21 Aug 2013 16:28:25 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377104997')]\n+{\"url\":\"https://api.github.com/gists/6296732\",\"forks_url\":\"https://api.github.com/gists/6296732/forks\",\"commits_url\":\"https://api.github.com/gists/6296732/commits\",\"id\":\"6296732\",\"git_pull_url\":\"https://gist.github.com/6296732.git\",\"git_push_url\":\"https://gist.github.com/6296732.git\",\"html_url\":\"https://gist.github.com/6296732\",\"files\":{\"GithubAPI.lua\":{\"filename\":\"GithubAPI.lua\",\"type\":\"text/plain\",\"language\":\"Lua\",\"raw_url\":\"https://gist.github.com/raw/6296732/88aafa25fb28e17013054a117354a37f0d78963c/GithubAPI.lua\",\"size\":21229,\"content\":\"-- GithubAPI\\n-- @Author : Hyro Vitaly Protago\\n-- @Version : 1.0.0\\n\\n--[[\\n\\nINFOS :\\n - Cannot delete an anonymous gist\\n]]--\\n\\nGithubAPI = {\\n\\tlocation = \\\"https://api.github.com/\\\",\\n\\ttoken = nil,\\n\\tOAuth = {\\n\\t\\tauthorizations = {}\\n\\t},\\n\\tgist = {\\n\\t\\tlist = {},\\n\\t\\tcomment = {}\\n\\t},\\n\\tgithub = {}\\n}\\n\\n----------------------------------------------------------------------------\\n------------------------------ Github API ----------------------------------\\n----------------------------------------------------------------------------\\n\\n--- Authentication ---\\n\\n--[[ Scopes --\\n\\nScopes let you specify exactly what type of access you need. Scopes limit access for OAuth tokens.\\nThey do not grant any additional permission beyond that which the user already has.\\n\\nFor the web flow, requested scopes will be displayed to the user on the authorize form.\\n\\nCheck headers to see what OAuth scopes you have, and what the API action accepts.\\n\\n~~~\\n$ curl -H \\\"Authorization: token OAUTH-TOKEN\\\" https://api.github.com/users/technoweenie -I\\nHTTP/1.1 200 OK\\nX-OAuth-Scopes: repo, user\\nX-Accepted-OAuth-Scopes: user\\nX-OAuth-Scopes lists the scopes your token has authorized. X-Accepted-OAuth-Scopes lists the scopes that the action checks for.\\n~~~\\n\\n- (no scope)\\npublic read-only access (includes public user profile info, public repo info, and gists).\\n- user\\nRead/write access to profile info only. Note: this scope includes user:email and user:follow.\\n- user:email\\nRead access to a user’s email addresses.\\n- user:follow\\nAccess to follow or unfollow other users.\\n- public_repo\\nRead/write access to public repos and organizations.\\n- repo\\nRead/write access to public and private repos and organizations.\\n- repo:status\\nRead/write access to public and private repository commit statuses.\\nThis scope is only necessary to grant other users or services access to private repository commit statuses without granting access to the code.\\nThe repo and public_repo scopes already include access to commit status for private and public repositories respectively.\\n- delete_repo\\nDelete access to adminable repositories.\\n- notifications\\nRead access to a user’s notifications. repo is accepted too.\\n- gist\\nWrite access to gists.\\n\\nNOTE: Your application can request the scopes in the initial redirection. You can specify multiple scopes by separating them by a comma.\\n~~~\\nhttps://github.com/login/oauth/authorize?\\n client_id=...&\\n scope=user,public_repo\\n~~~\\n]]--\\n\\n-- Redirect users to request GitHub access --\\nfunction GithubAPI.OAuth.getToken(client_id, scope, callback)\\n\\tGithubAPI.http_request(\\\"https://github.com/login/oauth/authorize?client_id=\\\"..client_id..\\\"&scope=\\\"..scope, function(data, status, headers)\\n\\t\\tGithubAPI.OAuth._getToken(client_id, client_secret, data, callback)\\n\\tend, nil, true)\\nend\\n-- GitHub redirects back to your site --\\nfunction GithubAPI.OAuth._getToken(client_id, client_secret, code, callback)\\n\\tGithubAPI.http_request(\\\"https://github.com/login/oauth/access_token\\\", callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tclient_id = client_id,\\n\\t\\t\\tclient_secret = client_secret,\\n\\t\\t\\tcode = code\\n\\t\\t}\\n\\t}, true)\\nend\\n\\n-- List your authorizations --\\nfunction GithubAPI.OAuth.authorizations.list(callback)\\n\\tGithubAPI.http_request(\\\"authorizations\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nLink: ; rel=\\\"next\\\",\\n ; rel=\\\"last\\\"\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single authorization --\\nfunction GithubAPI.OAuth.authorizations.get(id, callback)\\n\\tGithubAPI.http_request(\\\"authorizations/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n}\\n]]--\\n\\n-- Create a new authorization --\\nfunction GithubAPI.OAuth.authorizations.create(callback, scopes, note, note_url, client_id, client_secret)\\n\\tGithubAPI.http_request(\\\"authorizations/\\\", callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tscopes = scopes,\\n\\t\\t\\tnote = note,\\n\\t\\t\\tnote_url = note_url,\\n\\t\\t\\tclient_id = client_id,\\n\\t\\t\\tclient_secret = client_secret\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\nscopes\\nOptional array - A list of scopes that this authorization is in.\\n\\nnote\\nOptional string - A note to remind you what the OAuth token is for.\\n\\nnote_url\\nOptional string - A URL to remind you what app the OAuth token is for.\\n\\nclient_id\\nOptional String - The 20 character OAuth app client key for which to create the token.\\n\\nclient_secret\\nOptional String - The 40 character OAuth app client secret for which to create the token.\\n~~~\\n{\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"note\\\": \\\"admin script\\\"\\n}\\n~~~\\n]]--\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/authorizations/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n}\\n]]--\\n\\n-- TODO\\n-- Update\\n-- Check\\n-- Delete\\n\\n--- GISTS ---\\n\\n-- List gists --\\nfunction GithubAPI.gist.list.user(user, callback)\\n\\tGithubAPI.http_request(\\\"users/\\\"..user..\\\"/gists\\\", callback)\\nend\\nfunction GithubAPI.gist.list.all(callback) -- return all public gists if called anonymously\\n\\tGithubAPI.http_request(\\\"gists\\\", callback)\\nend\\nfunction GithubAPI.gist.list.allPublic(callback)\\n\\tGithubAPI.http_request(\\\"gists/public\\\", callback)\\nend\\nfunction GithubAPI.gist.list.starred(callback)\\n\\tGithubAPI.http_request(\\\"gists/starred\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nLink: ; rel=\\\"next\\\",\\n ; rel=\\\"last\\\"\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single gist --\\nfunction GithubAPI.gist.get(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Create a gist --\\nfunction GithubAPI.gist.create(public, files, callback ,description)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tpublic = public,\\n\\t\\t\\tfiles = files,\\n\\t\\t\\tdescription = description\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"description\\\": \\\"the description for this gist\\\",\\n \\\"public\\\": true,\\n \\\"files\\\": {\\n \\\"file1.txt\\\": {\\n \\\"content\\\": \\\"String file contents\\\"\\n }\\n }\\n}\\n]]--\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Edit a gist --\\nfunction GithubAPI.gist.edit(id, files, callback, description)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {\\n\\t\\tmethod = \\\"PATCH\\\",\\n\\t\\tdata = {\\n\\t\\t\\tid = id,\\n\\t\\t\\tfiles = files,\\n\\t\\t\\tdescription = description\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"description\\\": \\\"the description for this gist\\\",\\n \\\"files\\\": {\\n \\\"file1.txt\\\": {\\n \\\"content\\\": \\\"updated file contents\\\"\\n },\\n \\\"old_name.txt\\\": {\\n \\\"filename\\\": \\\"new_name.txt\\\",\\n \\\"content\\\": \\\"modified contents\\\"\\n },\\n \\\"new_file.txt\\\": {\\n \\\"content\\\": \\\"a new file\\\"\\n },\\n \\\"delete_this_file.txt\\\": null\\n }\\n}\\n]]--\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Star a gist --\\nfunction GithubAPI.gist.star(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback, {method=\\\"PUT\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Unstar a gist --\\nfunction GithubAPI.gist.unstar(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback, {method=\\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Check if a gist is starred --\\nfunction GithubAPI.gist.checkStar(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback)\\nend\\n\\n--[[\\n-- Response if gist is starred --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n\\n-- Response if gist is not starred --\\nStatus: 404 Not Found\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Fork a gist --\\nfunction GithubAPI.gist.fork(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/forks\\\", callback, {method=\\\"POST\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/2\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n}\\n]]--\\n\\n-- Delete a gist --\\nfunction GithubAPI.gist.delete(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {method=\\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n--- GISTS COMMENTS ---\\n\\n-- List comments on a gist --\\nfunction GithubAPI.gist.comment.list(gist_id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single comment --\\nfunction GithubAPI.gist.comment.get(gist_id, id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Create a comment --\\nfunction GithubAPI.gist.comment.create(gist_id, body, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tbody = body\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\"\\n}\\n]]--\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/comments/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Edit a comment --\\nfunction GithubAPI.gist.comment.edit(gist_id, id, body, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {\\n\\t\\tmethod = \\\"PATCH\\\",\\n\\t\\tdata = {\\n\\t\\t\\tbody = body\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\"\\n}\\n]]--\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Delete a comment --\\nfunction GithubAPI.gist.comment.delete(gist_id, id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {method = \\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n----------------------------------------------------------------------------\\n-------------------------------- TOOLS -------------------------------------\\n----------------------------------------------------------------------------\\n\\nfunction GithubAPI.http_request(url, callback, opts, fullUrl)\\n\\topts = opts or {}\\n\\t-- if GithubAPI.token then opts.headers = TOKEN BEARER\\n\\tif opts.data then opts.data = json.encode(opts.data) end\\n\\n\\tlocal _url\\n\\tif (fullUrl) then _url = url else _url = GithubAPI.location .. url end\\n\\n\\thttp.request(_url, function(data, status, headers)\\n\\t\\tif (status == 500) then error(\\\"Github: Internal Server Error ...\\\") end\\n\\t\\tdata = json.decode(data)\\n\\t\\tcallback(data, status, headers)\\n\\tend, alert, opts)\\nend\\n\\nfunction GithubAPI.explode(div,str) -- credit: http://richard.warburton.it\\n if (div=='') then return false end\\n local pos,arr = 0,{}\\n for st,sp in function() return string.find(str,div,pos,true) end do\\n table.insert(arr,string.sub(str,pos,st-1))\\n pos = sp + 1\\n end\\n table.insert(arr,string.sub(str,pos))\\n return arr\\nend\\n\\n-- GITHUB TIMESTAMP (YYYY-MM-DDTHH:MM:SSZ) to os.time\\nfunction GithubAPI.gtimestamp(githubTime)\\n\\tgithubTime = githubTime:sub(1, #githubTime-1) -- remove Z\\n\\tgithubTime = GithubAPI.explode(\\\"T\\\", githubTime)\\n\\tgithubTime[1] = GithubAPI.explode(\\\"-\\\", githubTime[1])\\n\\tgithubTime[2] = GithubAPI.explode(\\\":\\\", githubTime[2])\\n\\treturn os.time({\\n\\t\\tyear = tonumber(githubTime[1][1]),\\n\\t\\tmonth = tonumber(githubTime[1][2]),\\n\\t\\tday = tonumber(githubTime[1][3]),\\n\\t\\thour = tonumber(githubTime[2][1]),\\n\\t\\tmin = tonumber(githubTime[2][2]),\\n\\t\\tsec = tonumber(githubTime[2][3])\\n\\t})\\nend\"}},\"public\":true,\"created_at\":\"2013-08-21T16:28:24Z\",\"updated_at\":\"2013-08-21T16:28:24Z\",\"description\":\"Github API\",\"comments\":0,\"user\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://2.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"comments_url\":\"https://api.github.com/gists/6296732/comments\",\"forks\":[],\"history\":[{\"user\":null,\"version\":\"c464aecd7fea16684e935607eeea7ae4f8caa0e2\",\"committed_at\":\"2013-08-21T16:12:27Z\",\"change_status\":{\"total\":793,\"additions\":793,\"deletions\":0},\"url\":\"https://api.github.com/gists/6296732/c464aecd7fea16684e935607eeea7ae4f8caa0e2\"}],\"fork_of\":{\"url\":\"https://api.github.com/gists/6296553\",\"forks_url\":\"https://api.github.com/gists/6296553/forks\",\"commits_url\":\"https://api.github.com/gists/6296553/commits\",\"id\":\"6296553\",\"git_pull_url\":\"https://gist.github.com/6296553.git\",\"git_push_url\":\"https://gist.github.com/6296553.git\",\"html_url\":\"https://gist.github.com/6296553\",\"files\":{},\"public\":true,\"created_at\":\"2013-08-21T16:12:27Z\",\"updated_at\":\"2013-08-21T16:28:24Z\",\"description\":\"Github API\",\"comments\":0,\"user\":{\"login\":\"HyroVitalyProtago\",\"id\":3470988,\"avatar_url\":\"https://1.gravatar.com/avatar/ed59562b231a649345f38703948f76f4?d=https%3A%2F%2Fidenticons.github.com%2F6582cb986b7a730b12f7c18dfcc865f0.png\",\"gravatar_id\":\"ed59562b231a649345f38703948f76f4\",\"url\":\"https://api.github.com/users/HyroVitalyProtago\",\"html_url\":\"https://github.com/HyroVitalyProtago\",\"followers_url\":\"https://api.github.com/users/HyroVitalyProtago/followers\",\"following_url\":\"https://api.github.com/users/HyroVitalyProtago/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/HyroVitalyProtago/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/HyroVitalyProtago/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/HyroVitalyProtago/subscriptions\",\"organizations_url\":\"https://api.github.com/users/HyroVitalyProtago/orgs\",\"repos_url\":\"https://api.github.com/users/HyroVitalyProtago/repos\",\"events_url\":\"https://api.github.com/users/HyroVitalyProtago/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/HyroVitalyProtago/received_events\",\"type\":\"User\"},\"comments_url\":\"https://api.github.com/gists/6296553/comments\"}}\n "},{"sha":"7d335ffc25d0f2bf8208709c1d73ec7b216eee61","filename":"github/tests/ReplayData/Github.testGetRepos.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Github.testGetRepos.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Github.testGetRepos.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Github.testGetRepos.txt?ref=a6597499c2f82e063074a3036d875417d5efa296"},{"sha":"476baddfbabd644ff708e3ea3778ae474ff03c86","filename":"github/tests/ReplayData/Github.testGetReposSince.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Github.testGetReposSince.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Github.testGetReposSince.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Github.testGetReposSince.txt?ref=a6597499c2f82e063074a3036d875417d5efa296"},{"sha":"6f6e25494e129725b5aad650839888e3494c52f7","filename":"github/tests/ReplayData/Hook.testTest.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Hook.testTest.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Hook.testTest.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Hook.testTest.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,7 +2,7 @@ https\n POST\n api.github.com\n None\n-/repos/jacquev6/PyGithub/hooks/257993/test\n+/repos/jacquev6/PyGithub/hooks/257993/tests\n {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n null\n 204"},{"sha":"08c61a84ee63868aac85f3d64397e65b0fdf9132","filename":"github/tests/ReplayData/NamedUser.testHasInFollowing.txt","status":"added","additions":22,"deletions":0,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/NamedUser.testHasInFollowing.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/NamedUser.testHasInFollowing.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/NamedUser.testHasInFollowing.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,22 @@\n+https\n+GET\n+api.github.com\n+None\n+/users/nvie\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '1218'), ('server', 'GitHub.com'), ('last-modified', 'Wed, 21 Aug 2013 16:26:40 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"8e2b307f8fb4186bfb512febd7215fc8\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Wed, 21 Aug 2013 17:20:44 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377108637')]\n+{\"login\":\"nvie\",\"id\":83844,\"avatar_url\":\"https://2.gravatar.com/avatar/466ef7561a0b100dc5a1021959962d28?d=https%3A%2F%2Fidenticons.github.com%2Fe6d0513ce49cc06cb956251623cb8fd9.png\",\"gravatar_id\":\"466ef7561a0b100dc5a1021959962d28\",\"url\":\"https://api.github.com/users/nvie\",\"html_url\":\"https://github.com/nvie\",\"followers_url\":\"https://api.github.com/users/nvie/followers\",\"following_url\":\"https://api.github.com/users/nvie/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/nvie/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/nvie/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/nvie/subscriptions\",\"organizations_url\":\"https://api.github.com/users/nvie/orgs\",\"repos_url\":\"https://api.github.com/users/nvie/repos\",\"events_url\":\"https://api.github.com/users/nvie/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/nvie/received_events\",\"type\":\"User\",\"name\":\"Vincent Driessen\",\"company\":\"3rd Cloud\",\"blog\":\"http://nvie.com\",\"location\":\"Netherlands\",\"email\":\"vincent@3rdcloud.com\",\"hireable\":true,\"bio\":null,\"public_repos\":86,\"followers\":530,\"following\":45,\"created_at\":\"2009-05-12T21:19:38Z\",\"updated_at\":\"2013-08-21T16:26:40Z\",\"public_gists\":38}\n+\n+https\n+GET\n+api.github.com\n+None\n+/users/jacquev6/following/nvie\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+204\n+[('status', '204 No Content'), ('x-ratelimit-remaining', '4995'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('vary', 'Accept-Encoding'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('access-control-allow-credentials', 'true'), ('date', 'Wed, 21 Aug 2013 17:20:48 GMT'), ('access-control-allow-origin', '*'), ('x-ratelimit-reset', '1377108637')]\n+\n+"},{"sha":"dfc62ba258a155c9b40432ec67a51b8b8822ec73","filename":"github/tests/ReplayData/Persistence.setUp.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Persistence.setUp.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Persistence.setUp.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Persistence.setUp.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '13698'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:09:11 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"8600bedcb7fed1d8065e1693e05529ce\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:13:08 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377140429')]\n+{\"id\":12156762,\"name\":\"PyGithub\",\"full_name\":\"akfish/PyGithub\",\"owner\":{\"login\":\"akfish\",\"id\":922715,\"avatar_url\":\"https://1.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png\",\"gravatar_id\":\"12a1b44d4e5c19cee59618084602b112\",\"url\":\"https://api.github.com/users/akfish\",\"html_url\":\"https://github.com/akfish\",\"followers_url\":\"https://api.github.com/users/akfish/followers\",\"following_url\":\"https://api.github.com/users/akfish/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/akfish/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/akfish/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/akfish/subscriptions\",\"organizations_url\":\"https://api.github.com/users/akfish/orgs\",\"repos_url\":\"https://api.github.com/users/akfish/repos\",\"events_url\":\"https://api.github.com/users/akfish/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/akfish/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/akfish/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":true,\"url\":\"https://api.github.com/repos/akfish/PyGithub\",\"forks_url\":\"https://api.github.com/repos/akfish/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/akfish/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/akfish/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/akfish/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/akfish/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/akfish/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/akfish/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/akfish/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/akfish/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/akfish/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/akfish/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/akfish/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/akfish/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/akfish/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/akfish/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/akfish/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/akfish/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/akfish/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/akfish/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/akfish/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/akfish/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/akfish/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/akfish/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/akfish/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/akfish/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/akfish/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/akfish/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/akfish/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/akfish/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/akfish/PyGithub/labels{/name}\",\"created_at\":\"2013-08-16T10:56:11Z\",\"updated_at\":\"2013-08-22T02:09:11Z\",\"pushed_at\":\"2013-08-22T02:09:09Z\",\"git_url\":\"git://github.com/akfish/PyGithub.git\",\"ssh_url\":\"git@github.com:akfish/PyGithub.git\",\"clone_url\":\"https://github.com/akfish/PyGithub.git\",\"svn_url\":\"https://github.com/akfish/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":6736,\"watchers_count\":0,\"language\":\"Python\",\"has_issues\":false,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":0,\"mirror_url\":null,\"open_issues_count\":0,\"forks\":0,\"open_issues\":0,\"watchers\":0,\"master_branch\":\"master\",\"default_branch\":\"master\",\"permissions\":{\"admin\":true,\"push\":true,\"pull\":true},\"network_count\":70,\"parent\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"},\"source\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"}}\n+"},{"sha":"b6d8aeec9b3c663cfe561eb2513a514f10011673","filename":"github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Persistence.testLoadAndUpdate.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'If-None-Match': '\"8600bedcb7fed1d8065e1693e05529ce\"', 'User-Agent': 'PyGithub/Python', 'Authorization': 'Basic login_and_password_removed', 'If-Modified-Since': 'Thu, 22 Aug 2013 02:09:11 GMT'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '13712'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:14:54 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"ef281ef0e821c18f80da36902727160b\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:15:01 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377140429')]\n+{\"id\":12156762,\"name\":\"PyGithub\",\"full_name\":\"akfish/PyGithub\",\"owner\":{\"login\":\"akfish\",\"id\":922715,\"avatar_url\":\"https://0.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png\",\"gravatar_id\":\"12a1b44d4e5c19cee59618084602b112\",\"url\":\"https://api.github.com/users/akfish\",\"html_url\":\"https://github.com/akfish\",\"followers_url\":\"https://api.github.com/users/akfish/followers\",\"following_url\":\"https://api.github.com/users/akfish/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/akfish/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/akfish/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/akfish/subscriptions\",\"organizations_url\":\"https://api.github.com/users/akfish/orgs\",\"repos_url\":\"https://api.github.com/users/akfish/repos\",\"events_url\":\"https://api.github.com/users/akfish/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/akfish/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/akfish/PyGithub\",\"description\":\"Python library implementing the full Github API v3 - AKFish Fork\",\"fork\":true,\"url\":\"https://api.github.com/repos/akfish/PyGithub\",\"forks_url\":\"https://api.github.com/repos/akfish/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/akfish/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/akfish/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/akfish/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/akfish/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/akfish/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/akfish/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/akfish/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/akfish/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/akfish/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/akfish/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/akfish/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/akfish/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/akfish/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/akfish/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/akfish/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/akfish/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/akfish/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/akfish/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/akfish/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/akfish/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/akfish/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/akfish/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/akfish/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/akfish/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/akfish/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/akfish/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/akfish/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/akfish/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/akfish/PyGithub/labels{/name}\",\"created_at\":\"2013-08-16T10:56:11Z\",\"updated_at\":\"2013-08-22T02:14:54Z\",\"pushed_at\":\"2013-08-22T02:09:09Z\",\"git_url\":\"git://github.com/akfish/PyGithub.git\",\"ssh_url\":\"git@github.com:akfish/PyGithub.git\",\"clone_url\":\"https://github.com/akfish/PyGithub.git\",\"svn_url\":\"https://github.com/akfish/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":6736,\"watchers_count\":0,\"language\":\"Python\",\"has_issues\":false,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":0,\"mirror_url\":null,\"open_issues_count\":0,\"forks\":0,\"open_issues\":0,\"watchers\":0,\"master_branch\":\"master\",\"default_branch\":\"master\",\"permissions\":{\"admin\":true,\"push\":true,\"pull\":true},\"network_count\":70,\"parent\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"},\"source\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"}}\n+"},{"sha":"3d4b27e8aa1282bb8401e6e2ae753044a7208686","filename":"github/tests/ReplayData/Status.testGetLastMessage.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetLastMessage.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetLastMessage.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Status.testGetLastMessage.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+status.github.com\n+443\n+/api/last-message.json\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('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')]\n+{\"status\":\"good\",\"body\":\"Everything operating normally.\",\"created_on\":\"2013-09-01T15:41:46Z\"}\n+"},{"sha":"6c79412a7a4039830228927d1ca5c9557298bdd3","filename":"github/tests/ReplayData/Status.testGetMessages.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetMessages.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetMessages.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Status.testGetMessages.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+status.github.com\n+443\n+/api/messages.json\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('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')]\n+[{\"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\"}]\n+"},{"sha":"e01aec021bcb172a4eaf436c5d23e69594bc022f","filename":"github/tests/ReplayData/Status.testGetStatus.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetStatus.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetStatus.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Status.testGetStatus.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+status.github.com\n+443\n+/api/status.json\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('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')]\n+{\"status\":\"good\",\"last_updated\":\"2013-09-06T08:29:27Z\"}\n+"},{"sha":"0bb3c935ce2f4fa86d410b2759a4825e42bc44a3","filename":"github/tests/Status.py","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Status.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Status.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Status.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,43 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+import Framework\n+\n+import github\n+import datetime\n+\n+\n+class Status(Framework.TestCase):\n+ def testGetStatus(self):\n+ status = self.g.get_api_status()\n+ self.assertEqual(status.status, \"good\")\n+ self.assertEqual(status.last_updated, datetime.datetime(2013, 9, 6, 8, 29, 27))\n+\n+ def testGetLastMessage(self):\n+ message = self.g.get_last_api_status_message()\n+ self.assertEqual(message.status, \"good\")\n+ self.assertEqual(message.body, \"Everything operating normally.\")\n+ self.assertEqual(message.created_on, datetime.datetime(2013, 9, 1, 15, 41, 46))\n+\n+ def testGetMessages(self):\n+ self.assertListKeyEqual(self.g.get_api_status_messages(), lambda m: m.status, [\"good\", \"minor\", \"good\", \"minor\", \"good\", \"minor\", \"good\", \"minor\", \"good\", \"major\", \"good\", \"minor\"])"},{"sha":"3439c6f189e0bd05a747ff4c702518068fde7b3b","filename":"scripts/fix_headers.py","status":"modified","additions":2,"deletions":0,"changes":2,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/scripts/fix_headers.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/scripts/fix_headers.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/scripts/fix_headers.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -132,6 +132,8 @@ def findHeadersAndFiles():\n dirs.remove(\".git\")\n if \"developer.github.com\" in dirs:\n dirs.remove(\"developer.github.com\")\n+ if \"build\" in dirs:\n+ dirs.remove(\"build\")\n \n for filename in files:\n fullname = os.path.join(root, filename)"}]} +{"url":"https://api.github.com/repos/jacquev6/PyGithub/compare/master...develop","html_url":"https://github.com/jacquev6/PyGithub/compare/master...develop","permalink_url":"https://github.com/jacquev6/PyGithub/compare/jacquev6:ed781f8...jacquev6:a659749","diff_url":"https://github.com/jacquev6/PyGithub/compare/master...develop.diff","patch_url":"https://github.com/jacquev6/PyGithub/compare/master...develop.patch","base_commit":{"sha":"ed781f8b1b96e1d2a342d36ca53114ea28862fa8","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:39:22Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:39:22Z"},"message":"Fix date of 1.18.0","tree":{"sha":"e90c43164378222f04883c0f6547102df818d1ef","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e90c43164378222f04883c0f6547102df818d1ef"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","html_url":"https://github.com/jacquev6/PyGithub/commit/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2c4e3cbc24581c214f44682bfc3e7f438bae127a","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2c4e3cbc24581c214f44682bfc3e7f438bae127a","html_url":"https://github.com/jacquev6/PyGithub/commit/2c4e3cbc24581c214f44682bfc3e7f438bae127a"}]},"merge_base_commit":{"sha":"ed781f8b1b96e1d2a342d36ca53114ea28862fa8","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:39:22Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:39:22Z"},"message":"Fix date of 1.18.0","tree":{"sha":"e90c43164378222f04883c0f6547102df818d1ef","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e90c43164378222f04883c0f6547102df818d1ef"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","html_url":"https://github.com/jacquev6/PyGithub/commit/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2c4e3cbc24581c214f44682bfc3e7f438bae127a","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2c4e3cbc24581c214f44682bfc3e7f438bae127a","html_url":"https://github.com/jacquev6/PyGithub/commit/2c4e3cbc24581c214f44682bfc3e7f438bae127a"}]},"status":"ahead","ahead_by":99,"behind_by":0,"total_commits":99,"commits":[{"sha":"ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T00:27:42Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T00:27:42Z"},"message":"Update .gitignore to ignore eproject settings and custom build batch files","tree":{"sha":"b4bf5289c36eb4f50999895cf7f1d0c8ddd26448","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/b4bf5289c36eb4f50999895cf7f1d0c8ddd26448"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","html_url":"https://github.com/jacquev6/PyGithub/commit/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0a1e1fa488a7cf43016fe9ec30e5cc54dfcc7bfd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0a1e1fa488a7cf43016fe9ec30e5cc54dfcc7bfd","html_url":"https://github.com/jacquev6/PyGithub/commit/0a1e1fa488a7cf43016fe9ec30e5cc54dfcc7bfd"}]},{"sha":"cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T03:21:15Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T03:21:15Z"},"message":"Change GithubObject.__init__ without breaking build.","tree":{"sha":"30c8a26c9dd4a5c68c8b15666f126f9ef3929d8f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/30c8a26c9dd4a5c68c8b15666f126f9ef3929d8f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","html_url":"https://github.com/jacquev6/PyGithub/commit/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03","html_url":"https://github.com/jacquev6/PyGithub/commit/ea4bd8c9ad94a2e38bc272c9f9ff8cfdccea4c03"}]},{"sha":"0bc138b490b0b9d7ebc5e539547b88e062dd127d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T04:32:41Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T04:32:41Z"},"message":"Change NonCompletableGithubObject without breaking build.","tree":{"sha":"05c4e4c51ed7f77adf8f96b1ef6262bd004822db","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/05c4e4c51ed7f77adf8f96b1ef6262bd004822db"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0bc138b490b0b9d7ebc5e539547b88e062dd127d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0bc138b490b0b9d7ebc5e539547b88e062dd127d","html_url":"https://github.com/jacquev6/PyGithub/commit/0bc138b490b0b9d7ebc5e539547b88e062dd127d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0bc138b490b0b9d7ebc5e539547b88e062dd127d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f","html_url":"https://github.com/jacquev6/PyGithub/commit/cfbe7fb0b0e8f72f8725e48a4155ab0338d9773f"}]},{"sha":"b12c4b38c55ad9649541668950a01e6b3940a1bc","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:05:41Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:05:41Z"},"message":"Update Tag.py","tree":{"sha":"61648b068707a2dd5d7cc00832acc5eb76be102e","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/61648b068707a2dd5d7cc00832acc5eb76be102e"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/b12c4b38c55ad9649541668950a01e6b3940a1bc","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b12c4b38c55ad9649541668950a01e6b3940a1bc","html_url":"https://github.com/jacquev6/PyGithub/commit/b12c4b38c55ad9649541668950a01e6b3940a1bc","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b12c4b38c55ad9649541668950a01e6b3940a1bc/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0bc138b490b0b9d7ebc5e539547b88e062dd127d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0bc138b490b0b9d7ebc5e539547b88e062dd127d","html_url":"https://github.com/jacquev6/PyGithub/commit/0bc138b490b0b9d7ebc5e539547b88e062dd127d"}]},{"sha":"9f6562cb625d30b08b053da44a059ace70ed366e","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:07:23Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:07:23Z"},"message":"Update CommitStatus.py","tree":{"sha":"9d219ca7890099f4b9865927af6d8444557d5dd9","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9d219ca7890099f4b9865927af6d8444557d5dd9"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/9f6562cb625d30b08b053da44a059ace70ed366e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/9f6562cb625d30b08b053da44a059ace70ed366e","html_url":"https://github.com/jacquev6/PyGithub/commit/9f6562cb625d30b08b053da44a059ace70ed366e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/9f6562cb625d30b08b053da44a059ace70ed366e/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"b12c4b38c55ad9649541668950a01e6b3940a1bc","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b12c4b38c55ad9649541668950a01e6b3940a1bc","html_url":"https://github.com/jacquev6/PyGithub/commit/b12c4b38c55ad9649541668950a01e6b3940a1bc"}]},{"sha":"e8e8d174fb65249dd6aa41d3ec7993223dc83af4","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:08:48Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:08:48Z"},"message":"Update Event.py","tree":{"sha":"965865c144a91581cd5560a6853ac7d244e8621d","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/965865c144a91581cd5560a6853ac7d244e8621d"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e8e8d174fb65249dd6aa41d3ec7993223dc83af4","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e8e8d174fb65249dd6aa41d3ec7993223dc83af4","html_url":"https://github.com/jacquev6/PyGithub/commit/e8e8d174fb65249dd6aa41d3ec7993223dc83af4","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e8e8d174fb65249dd6aa41d3ec7993223dc83af4/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"9f6562cb625d30b08b053da44a059ace70ed366e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/9f6562cb625d30b08b053da44a059ace70ed366e","html_url":"https://github.com/jacquev6/PyGithub/commit/9f6562cb625d30b08b053da44a059ace70ed366e"}]},{"sha":"6943f6da7f84b05b8eae4555dbc598df2fe5ec01","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:10:32Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:10:32Z"},"message":"Update Branch.py","tree":{"sha":"69f9bb6bfbaa5a78bf94976b71fb778f6e105c17","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/69f9bb6bfbaa5a78bf94976b71fb778f6e105c17"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6943f6da7f84b05b8eae4555dbc598df2fe5ec01","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6943f6da7f84b05b8eae4555dbc598df2fe5ec01","html_url":"https://github.com/jacquev6/PyGithub/commit/6943f6da7f84b05b8eae4555dbc598df2fe5ec01","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6943f6da7f84b05b8eae4555dbc598df2fe5ec01/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"e8e8d174fb65249dd6aa41d3ec7993223dc83af4","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e8e8d174fb65249dd6aa41d3ec7993223dc83af4","html_url":"https://github.com/jacquev6/PyGithub/commit/e8e8d174fb65249dd6aa41d3ec7993223dc83af4"}]},{"sha":"bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:15:25Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:15:25Z"},"message":"Update File.py","tree":{"sha":"1435b24b2da7c0403801e09ea0e9bf9cc1660eac","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/1435b24b2da7c0403801e09ea0e9bf9cc1660eac"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","html_url":"https://github.com/jacquev6/PyGithub/commit/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"6943f6da7f84b05b8eae4555dbc598df2fe5ec01","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6943f6da7f84b05b8eae4555dbc598df2fe5ec01","html_url":"https://github.com/jacquev6/PyGithub/commit/6943f6da7f84b05b8eae4555dbc598df2fe5ec01"}]},{"sha":"c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:18:29Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:18:29Z"},"message":"Update Gist.py","tree":{"sha":"002b4962bc4386c46823d1f2f36c7fad4e8aa2b4","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/002b4962bc4386c46823d1f2f36c7fad4e8aa2b4"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","html_url":"https://github.com/jacquev6/PyGithub/commit/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd","html_url":"https://github.com/jacquev6/PyGithub/commit/bb56857b4d5e9d85f26815a3da4c69f6bc718fbd"}]},{"sha":"4f1e05200d35e951fb52730c3d783c2942836695","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:21:49Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:21:49Z"},"message":"Update GitAuthor.py","tree":{"sha":"c5ad338858b03d34b38b1ca8a8ea8578d5a64da5","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/c5ad338858b03d34b38b1ca8a8ea8578d5a64da5"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/4f1e05200d35e951fb52730c3d783c2942836695","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4f1e05200d35e951fb52730c3d783c2942836695","html_url":"https://github.com/jacquev6/PyGithub/commit/4f1e05200d35e951fb52730c3d783c2942836695","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4f1e05200d35e951fb52730c3d783c2942836695/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a","html_url":"https://github.com/jacquev6/PyGithub/commit/c2dd9452eabc70bf88fc4769e48df63c0de8ce8a"}]},{"sha":"0879cbb6ff5f349bc8f867dace06801cf8f04136","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:23:21Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:23:21Z"},"message":"Update GitignoreTemplate.py","tree":{"sha":"eac0b02fc4be8c34681d548624dec5d93b0875e4","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/eac0b02fc4be8c34681d548624dec5d93b0875e4"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0879cbb6ff5f349bc8f867dace06801cf8f04136","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0879cbb6ff5f349bc8f867dace06801cf8f04136","html_url":"https://github.com/jacquev6/PyGithub/commit/0879cbb6ff5f349bc8f867dace06801cf8f04136","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0879cbb6ff5f349bc8f867dace06801cf8f04136/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"4f1e05200d35e951fb52730c3d783c2942836695","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4f1e05200d35e951fb52730c3d783c2942836695","html_url":"https://github.com/jacquev6/PyGithub/commit/4f1e05200d35e951fb52730c3d783c2942836695"}]},{"sha":"274ab70f874098d1a0385e636748f0651b739e62","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:26:08Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:26:08Z"},"message":"Update GitObject.py","tree":{"sha":"596c0e549efc2279f7343db4d1abee3eb70955c7","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/596c0e549efc2279f7343db4d1abee3eb70955c7"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/274ab70f874098d1a0385e636748f0651b739e62","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/274ab70f874098d1a0385e636748f0651b739e62","html_url":"https://github.com/jacquev6/PyGithub/commit/274ab70f874098d1a0385e636748f0651b739e62","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/274ab70f874098d1a0385e636748f0651b739e62/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0879cbb6ff5f349bc8f867dace06801cf8f04136","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0879cbb6ff5f349bc8f867dace06801cf8f04136","html_url":"https://github.com/jacquev6/PyGithub/commit/0879cbb6ff5f349bc8f867dace06801cf8f04136"}]},{"sha":"02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:30:39Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:30:39Z"},"message":"Update GitTree.py","tree":{"sha":"245148f865501a2ad0614136baef4ea6c2341992","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/245148f865501a2ad0614136baef4ea6c2341992"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","html_url":"https://github.com/jacquev6/PyGithub/commit/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"274ab70f874098d1a0385e636748f0651b739e62","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/274ab70f874098d1a0385e636748f0651b739e62","html_url":"https://github.com/jacquev6/PyGithub/commit/274ab70f874098d1a0385e636748f0651b739e62"}]},{"sha":"ac1585ee13f13cfa20fd79a78c4643de815607fd","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:59:08Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T05:59:08Z"},"message":"Update HookDescription.py.","tree":{"sha":"6509b30ec9b0ff54edde6277bf408585b68e464b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6509b30ec9b0ff54edde6277bf408585b68e464b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ac1585ee13f13cfa20fd79a78c4643de815607fd","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ac1585ee13f13cfa20fd79a78c4643de815607fd","html_url":"https://github.com/jacquev6/PyGithub/commit/ac1585ee13f13cfa20fd79a78c4643de815607fd","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ac1585ee13f13cfa20fd79a78c4643de815607fd/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290","html_url":"https://github.com/jacquev6/PyGithub/commit/02435f3a9f5f321f5ff3d5c1f4bcb9a10fc5e290"}]},{"sha":"d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:03:57Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:03:57Z"},"message":"Update IssuePullRequest.py","tree":{"sha":"a5ea8a1ed6a03152d916d4c066ee2394ed4a4f97","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a5ea8a1ed6a03152d916d4c066ee2394ed4a4f97"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","html_url":"https://github.com/jacquev6/PyGithub/commit/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ac1585ee13f13cfa20fd79a78c4643de815607fd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ac1585ee13f13cfa20fd79a78c4643de815607fd","html_url":"https://github.com/jacquev6/PyGithub/commit/ac1585ee13f13cfa20fd79a78c4643de815607fd"}]},{"sha":"12387505e2fbf25ceae63f169b13d57d86b80282","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:05:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:05:10Z"},"message":"Update Notification.py","tree":{"sha":"2a05533d50e9e0b9173fa9030bad2259f9a8d24b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/2a05533d50e9e0b9173fa9030bad2259f9a8d24b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/12387505e2fbf25ceae63f169b13d57d86b80282","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/12387505e2fbf25ceae63f169b13d57d86b80282","html_url":"https://github.com/jacquev6/PyGithub/commit/12387505e2fbf25ceae63f169b13d57d86b80282","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/12387505e2fbf25ceae63f169b13d57d86b80282/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d","html_url":"https://github.com/jacquev6/PyGithub/commit/d6170e36de261f8107cdc40e1e6e3c91bac0eb3d"}]},{"sha":"6e11aa9cf041be25691971476bc474facb1bd1f1","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:07:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:07:10Z"},"message":"Update Permissions.py","tree":{"sha":"1653ca5e502dacc579e8489c1ff967970e95a68f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/1653ca5e502dacc579e8489c1ff967970e95a68f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6e11aa9cf041be25691971476bc474facb1bd1f1","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6e11aa9cf041be25691971476bc474facb1bd1f1","html_url":"https://github.com/jacquev6/PyGithub/commit/6e11aa9cf041be25691971476bc474facb1bd1f1","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6e11aa9cf041be25691971476bc474facb1bd1f1/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"12387505e2fbf25ceae63f169b13d57d86b80282","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/12387505e2fbf25ceae63f169b13d57d86b80282","html_url":"https://github.com/jacquev6/PyGithub/commit/12387505e2fbf25ceae63f169b13d57d86b80282"}]},{"sha":"dcb6874745b2e0466017f94be745ba35b72a3748","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:09:11Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:09:11Z"},"message":"Fix CommitStats.py","tree":{"sha":"9191d147b43f13eee33b585441a4573028534a02","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9191d147b43f13eee33b585441a4573028534a02"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/dcb6874745b2e0466017f94be745ba35b72a3748","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dcb6874745b2e0466017f94be745ba35b72a3748","html_url":"https://github.com/jacquev6/PyGithub/commit/dcb6874745b2e0466017f94be745ba35b72a3748","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dcb6874745b2e0466017f94be745ba35b72a3748/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"6e11aa9cf041be25691971476bc474facb1bd1f1","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6e11aa9cf041be25691971476bc474facb1bd1f1","html_url":"https://github.com/jacquev6/PyGithub/commit/6e11aa9cf041be25691971476bc474facb1bd1f1"}]},{"sha":"deb0514b5e7364b307a611797681da8ddf6db5c1","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:10:37Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:10:37Z"},"message":"Update Hook.py","tree":{"sha":"2a46cd5f6c33398d1b347912bcdc596fa0b66d0d","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/2a46cd5f6c33398d1b347912bcdc596fa0b66d0d"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/deb0514b5e7364b307a611797681da8ddf6db5c1","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/deb0514b5e7364b307a611797681da8ddf6db5c1","html_url":"https://github.com/jacquev6/PyGithub/commit/deb0514b5e7364b307a611797681da8ddf6db5c1","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/deb0514b5e7364b307a611797681da8ddf6db5c1/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"dcb6874745b2e0466017f94be745ba35b72a3748","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dcb6874745b2e0466017f94be745ba35b72a3748","html_url":"https://github.com/jacquev6/PyGithub/commit/dcb6874745b2e0466017f94be745ba35b72a3748"}]},{"sha":"c7aeaddfa8897ed9a23764bbb4beda29403ab413","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:13:14Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:13:14Z"},"message":"Fix PullRequestMergeStatus.py","tree":{"sha":"e4f7ae5aa275ca50cbc0e52dcb49ad224355f0af","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e4f7ae5aa275ca50cbc0e52dcb49ad224355f0af"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c7aeaddfa8897ed9a23764bbb4beda29403ab413","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7aeaddfa8897ed9a23764bbb4beda29403ab413","html_url":"https://github.com/jacquev6/PyGithub/commit/c7aeaddfa8897ed9a23764bbb4beda29403ab413","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7aeaddfa8897ed9a23764bbb4beda29403ab413/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"deb0514b5e7364b307a611797681da8ddf6db5c1","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/deb0514b5e7364b307a611797681da8ddf6db5c1","html_url":"https://github.com/jacquev6/PyGithub/commit/deb0514b5e7364b307a611797681da8ddf6db5c1"}]},{"sha":"b2c4519c06cf541ae327d80b0b1361e2698e23ae","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:15:09Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:15:09Z"},"message":"Update PulllRequestPart.py","tree":{"sha":"476f8bc503a98475a13bcf929c9af2034044be23","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/476f8bc503a98475a13bcf929c9af2034044be23"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/b2c4519c06cf541ae327d80b0b1361e2698e23ae","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b2c4519c06cf541ae327d80b0b1361e2698e23ae","html_url":"https://github.com/jacquev6/PyGithub/commit/b2c4519c06cf541ae327d80b0b1361e2698e23ae","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b2c4519c06cf541ae327d80b0b1361e2698e23ae/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c7aeaddfa8897ed9a23764bbb4beda29403ab413","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7aeaddfa8897ed9a23764bbb4beda29403ab413","html_url":"https://github.com/jacquev6/PyGithub/commit/c7aeaddfa8897ed9a23764bbb4beda29403ab413"}]},{"sha":"4a1a1d406896ebd96315fcf9092ab68dfb7a7194","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:19:31Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:19:31Z"},"message":"Update Plan.py","tree":{"sha":"68e82c7745d78fca9ac29501be72a3613f95876a","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/68e82c7745d78fca9ac29501be72a3613f95876a"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/4a1a1d406896ebd96315fcf9092ab68dfb7a7194","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4a1a1d406896ebd96315fcf9092ab68dfb7a7194","html_url":"https://github.com/jacquev6/PyGithub/commit/4a1a1d406896ebd96315fcf9092ab68dfb7a7194","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4a1a1d406896ebd96315fcf9092ab68dfb7a7194/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"b2c4519c06cf541ae327d80b0b1361e2698e23ae","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b2c4519c06cf541ae327d80b0b1361e2698e23ae","html_url":"https://github.com/jacquev6/PyGithub/commit/b2c4519c06cf541ae327d80b0b1361e2698e23ae"}]},{"sha":"a1b65636df9408d93b115a3533a091e3e9cc68c4","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:25:07Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:25:07Z"},"message":"Clean up. NonCompletableGithubObject refactoring resolved.","tree":{"sha":"eec00d808853aee3bf03f8e705fbf49bd32b1dab","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/eec00d808853aee3bf03f8e705fbf49bd32b1dab"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/a1b65636df9408d93b115a3533a091e3e9cc68c4","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a1b65636df9408d93b115a3533a091e3e9cc68c4","html_url":"https://github.com/jacquev6/PyGithub/commit/a1b65636df9408d93b115a3533a091e3e9cc68c4","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a1b65636df9408d93b115a3533a091e3e9cc68c4/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"4a1a1d406896ebd96315fcf9092ab68dfb7a7194","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/4a1a1d406896ebd96315fcf9092ab68dfb7a7194","html_url":"https://github.com/jacquev6/PyGithub/commit/4a1a1d406896ebd96315fcf9092ab68dfb7a7194"}]},{"sha":"ca6189c3c94fac963811342ce9f77104d0b5774b","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:49:20Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T06:49:20Z"},"message":"Change CompletableGithubObject.__init__ without breaking build.","tree":{"sha":"a8fd06251014ac406f89342e2ee118fe5e5e562c","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a8fd06251014ac406f89342e2ee118fe5e5e562c"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ca6189c3c94fac963811342ce9f77104d0b5774b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ca6189c3c94fac963811342ce9f77104d0b5774b","html_url":"https://github.com/jacquev6/PyGithub/commit/ca6189c3c94fac963811342ce9f77104d0b5774b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ca6189c3c94fac963811342ce9f77104d0b5774b/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"a1b65636df9408d93b115a3533a091e3e9cc68c4","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a1b65636df9408d93b115a3533a091e3e9cc68c4","html_url":"https://github.com/jacquev6/PyGithub/commit/a1b65636df9408d93b115a3533a091e3e9cc68c4"}]},{"sha":"2f31828502c95fef62970db7d4ca49fa8b4b8e0d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:04:34Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:04:34Z"},"message":"Update RepositoryKey.py","tree":{"sha":"f1903010376227506f579412a3356276a2ef3a6f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/f1903010376227506f579412a3356276a2ef3a6f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/2f31828502c95fef62970db7d4ca49fa8b4b8e0d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2f31828502c95fef62970db7d4ca49fa8b4b8e0d","html_url":"https://github.com/jacquev6/PyGithub/commit/2f31828502c95fef62970db7d4ca49fa8b4b8e0d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2f31828502c95fef62970db7d4ca49fa8b4b8e0d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ca6189c3c94fac963811342ce9f77104d0b5774b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ca6189c3c94fac963811342ce9f77104d0b5774b","html_url":"https://github.com/jacquev6/PyGithub/commit/ca6189c3c94fac963811342ce9f77104d0b5774b"}]},{"sha":"28a49b94d87408592199ffa018e8c1b3bd9d2a77","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:06:21Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:06:21Z"},"message":"Update AuthenticatedUser.py","tree":{"sha":"be7f3930e35f7752cbf2541d3b9c2ea1b31a4cbb","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/be7f3930e35f7752cbf2541d3b9c2ea1b31a4cbb"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/28a49b94d87408592199ffa018e8c1b3bd9d2a77","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/28a49b94d87408592199ffa018e8c1b3bd9d2a77","html_url":"https://github.com/jacquev6/PyGithub/commit/28a49b94d87408592199ffa018e8c1b3bd9d2a77","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/28a49b94d87408592199ffa018e8c1b3bd9d2a77/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"2f31828502c95fef62970db7d4ca49fa8b4b8e0d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2f31828502c95fef62970db7d4ca49fa8b4b8e0d","html_url":"https://github.com/jacquev6/PyGithub/commit/2f31828502c95fef62970db7d4ca49fa8b4b8e0d"}]},{"sha":"0e19d8e04e847aac690fcd5563c35aa0c1808a80","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:09:34Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:09:34Z"},"message":"Update Authorization.py","tree":{"sha":"fd2c8b34609c810f111d6f911e7bf8af932a3057","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/fd2c8b34609c810f111d6f911e7bf8af932a3057"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0e19d8e04e847aac690fcd5563c35aa0c1808a80","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e19d8e04e847aac690fcd5563c35aa0c1808a80","html_url":"https://github.com/jacquev6/PyGithub/commit/0e19d8e04e847aac690fcd5563c35aa0c1808a80","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e19d8e04e847aac690fcd5563c35aa0c1808a80/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"28a49b94d87408592199ffa018e8c1b3bd9d2a77","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/28a49b94d87408592199ffa018e8c1b3bd9d2a77","html_url":"https://github.com/jacquev6/PyGithub/commit/28a49b94d87408592199ffa018e8c1b3bd9d2a77"}]},{"sha":"83c6495ec557898cd17a70be184c307558b4535c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:10:54Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:10:54Z"},"message":"Update AuthorizationApplication.py","tree":{"sha":"59197288fa8348a8fea3ff62a624c1f423bdc243","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/59197288fa8348a8fea3ff62a624c1f423bdc243"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/83c6495ec557898cd17a70be184c307558b4535c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/83c6495ec557898cd17a70be184c307558b4535c","html_url":"https://github.com/jacquev6/PyGithub/commit/83c6495ec557898cd17a70be184c307558b4535c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/83c6495ec557898cd17a70be184c307558b4535c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0e19d8e04e847aac690fcd5563c35aa0c1808a80","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e19d8e04e847aac690fcd5563c35aa0c1808a80","html_url":"https://github.com/jacquev6/PyGithub/commit/0e19d8e04e847aac690fcd5563c35aa0c1808a80"}]},{"sha":"ed32e78da1303962afaf8fa0d616a1828fdaa80b","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:26:05Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:26:05Z"},"message":"Update Commit.py and GitCommit.py","tree":{"sha":"137ed1870455860097e3fde5ecc1d32d3ae58461","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/137ed1870455860097e3fde5ecc1d32d3ae58461"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ed32e78da1303962afaf8fa0d616a1828fdaa80b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed32e78da1303962afaf8fa0d616a1828fdaa80b","html_url":"https://github.com/jacquev6/PyGithub/commit/ed32e78da1303962afaf8fa0d616a1828fdaa80b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed32e78da1303962afaf8fa0d616a1828fdaa80b/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"83c6495ec557898cd17a70be184c307558b4535c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/83c6495ec557898cd17a70be184c307558b4535c","html_url":"https://github.com/jacquev6/PyGithub/commit/83c6495ec557898cd17a70be184c307558b4535c"}]},{"sha":"3b2e19488fc6a5f51574d874e546173c1835d10b","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:28:00Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:28:00Z"},"message":"Update CommitComment.py","tree":{"sha":"99c70f3baa022e7e837f7903172325a78d41a2a4","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/99c70f3baa022e7e837f7903172325a78d41a2a4"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/3b2e19488fc6a5f51574d874e546173c1835d10b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3b2e19488fc6a5f51574d874e546173c1835d10b","html_url":"https://github.com/jacquev6/PyGithub/commit/3b2e19488fc6a5f51574d874e546173c1835d10b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3b2e19488fc6a5f51574d874e546173c1835d10b/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ed32e78da1303962afaf8fa0d616a1828fdaa80b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed32e78da1303962afaf8fa0d616a1828fdaa80b","html_url":"https://github.com/jacquev6/PyGithub/commit/ed32e78da1303962afaf8fa0d616a1828fdaa80b"}]},{"sha":"ced048663ba392bfee2543cea5f5fbf875771c0e","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:29:13Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:29:13Z"},"message":"Update Comparision.py","tree":{"sha":"25c0fef0fa652ad8bce55c3efbd10028298eb24f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/25c0fef0fa652ad8bce55c3efbd10028298eb24f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ced048663ba392bfee2543cea5f5fbf875771c0e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ced048663ba392bfee2543cea5f5fbf875771c0e","html_url":"https://github.com/jacquev6/PyGithub/commit/ced048663ba392bfee2543cea5f5fbf875771c0e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ced048663ba392bfee2543cea5f5fbf875771c0e/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"3b2e19488fc6a5f51574d874e546173c1835d10b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3b2e19488fc6a5f51574d874e546173c1835d10b","html_url":"https://github.com/jacquev6/PyGithub/commit/3b2e19488fc6a5f51574d874e546173c1835d10b"}]},{"sha":"0c13da45929dbc528a4f8f14f8ce54df15888660","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:31:45Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:31:45Z"},"message":"Update ContentFile.py","tree":{"sha":"a9d12c606be5d39883e814a16deca4c959374973","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a9d12c606be5d39883e814a16deca4c959374973"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0c13da45929dbc528a4f8f14f8ce54df15888660","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0c13da45929dbc528a4f8f14f8ce54df15888660","html_url":"https://github.com/jacquev6/PyGithub/commit/0c13da45929dbc528a4f8f14f8ce54df15888660","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0c13da45929dbc528a4f8f14f8ce54df15888660/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ced048663ba392bfee2543cea5f5fbf875771c0e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ced048663ba392bfee2543cea5f5fbf875771c0e","html_url":"https://github.com/jacquev6/PyGithub/commit/ced048663ba392bfee2543cea5f5fbf875771c0e"}]},{"sha":"c15cb6575b88b56b48fb21e66931ab2108c8b23c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:33:25Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:33:25Z"},"message":"Update Download.py","tree":{"sha":"77bb2d83e0989950f5b688505b40ee3bfc3274aa","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/77bb2d83e0989950f5b688505b40ee3bfc3274aa"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c15cb6575b88b56b48fb21e66931ab2108c8b23c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c15cb6575b88b56b48fb21e66931ab2108c8b23c","html_url":"https://github.com/jacquev6/PyGithub/commit/c15cb6575b88b56b48fb21e66931ab2108c8b23c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c15cb6575b88b56b48fb21e66931ab2108c8b23c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0c13da45929dbc528a4f8f14f8ce54df15888660","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0c13da45929dbc528a4f8f14f8ce54df15888660","html_url":"https://github.com/jacquev6/PyGithub/commit/0c13da45929dbc528a4f8f14f8ce54df15888660"}]},{"sha":"dc8173a5328cede580cae7e2bbf053ee98185d4e","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:39:34Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:39:34Z"},"message":"Update Gist*.py","tree":{"sha":"3d7859d27a4f4ef40a728f1787dea342b9f0d904","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/3d7859d27a4f4ef40a728f1787dea342b9f0d904"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/dc8173a5328cede580cae7e2bbf053ee98185d4e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc8173a5328cede580cae7e2bbf053ee98185d4e","html_url":"https://github.com/jacquev6/PyGithub/commit/dc8173a5328cede580cae7e2bbf053ee98185d4e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc8173a5328cede580cae7e2bbf053ee98185d4e/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c15cb6575b88b56b48fb21e66931ab2108c8b23c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c15cb6575b88b56b48fb21e66931ab2108c8b23c","html_url":"https://github.com/jacquev6/PyGithub/commit/c15cb6575b88b56b48fb21e66931ab2108c8b23c"}]},{"sha":"b43de50dc4f4a538e284645b4f83b597d008a8a2","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:48:08Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:48:08Z"},"message":"Update GitBlob.py","tree":{"sha":"fa891e8f586348ce6d20aa33c7a53215bb3f8eed","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/fa891e8f586348ce6d20aa33c7a53215bb3f8eed"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/b43de50dc4f4a538e284645b4f83b597d008a8a2","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b43de50dc4f4a538e284645b4f83b597d008a8a2","html_url":"https://github.com/jacquev6/PyGithub/commit/b43de50dc4f4a538e284645b4f83b597d008a8a2","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b43de50dc4f4a538e284645b4f83b597d008a8a2/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"dc8173a5328cede580cae7e2bbf053ee98185d4e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc8173a5328cede580cae7e2bbf053ee98185d4e","html_url":"https://github.com/jacquev6/PyGithub/commit/dc8173a5328cede580cae7e2bbf053ee98185d4e"}]},{"sha":"1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:51:12Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:51:12Z"},"message":"Update GitRef.py","tree":{"sha":"5bb940a1d3d1ca30ee86ae9e25fe56aee5132708","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/5bb940a1d3d1ca30ee86ae9e25fe56aee5132708"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","html_url":"https://github.com/jacquev6/PyGithub/commit/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"b43de50dc4f4a538e284645b4f83b597d008a8a2","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b43de50dc4f4a538e284645b4f83b597d008a8a2","html_url":"https://github.com/jacquev6/PyGithub/commit/b43de50dc4f4a538e284645b4f83b597d008a8a2"}]},{"sha":"c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:52:57Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:52:57Z"},"message":"Update GitTag.py","tree":{"sha":"86dc08675585c9a8631152f53fa61f7be7fd76ea","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/86dc08675585c9a8631152f53fa61f7be7fd76ea"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","html_url":"https://github.com/jacquev6/PyGithub/commit/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7","html_url":"https://github.com/jacquev6/PyGithub/commit/1dbc2dd38f5c31a8a48082daad4981c79d92f0b7"}]},{"sha":"038e35cb3d40f85b35b6fbe0807f9c761c474310","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:55:42Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:55:42Z"},"message":"Update GitTree","tree":{"sha":"48f4d2fd9511201c76ada8f1219cae44b427befd","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/48f4d2fd9511201c76ada8f1219cae44b427befd"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/038e35cb3d40f85b35b6fbe0807f9c761c474310","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/038e35cb3d40f85b35b6fbe0807f9c761c474310","html_url":"https://github.com/jacquev6/PyGithub/commit/038e35cb3d40f85b35b6fbe0807f9c761c474310","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/038e35cb3d40f85b35b6fbe0807f9c761c474310/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8","html_url":"https://github.com/jacquev6/PyGithub/commit/c89bebc729b48477b0d8949d9179bb2e9a7c3bf8"}]},{"sha":"044a000d7647e9134c69378f760ff1a2bd141f4d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:58:07Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T07:58:07Z"},"message":"Update Hook.py","tree":{"sha":"2372a21476b8ec8784687cc470382148733a92ed","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/2372a21476b8ec8784687cc470382148733a92ed"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/044a000d7647e9134c69378f760ff1a2bd141f4d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/044a000d7647e9134c69378f760ff1a2bd141f4d","html_url":"https://github.com/jacquev6/PyGithub/commit/044a000d7647e9134c69378f760ff1a2bd141f4d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/044a000d7647e9134c69378f760ff1a2bd141f4d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"038e35cb3d40f85b35b6fbe0807f9c761c474310","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/038e35cb3d40f85b35b6fbe0807f9c761c474310","html_url":"https://github.com/jacquev6/PyGithub/commit/038e35cb3d40f85b35b6fbe0807f9c761c474310"}]},{"sha":"49a69c9425789cfb21c49888a144b123ae564cf3","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:08:54Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:08:54Z"},"message":"Update Issue.py","tree":{"sha":"a32e11d7c6e916c0600ec08dbc9298423e4efefb","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a32e11d7c6e916c0600ec08dbc9298423e4efefb"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/49a69c9425789cfb21c49888a144b123ae564cf3","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/49a69c9425789cfb21c49888a144b123ae564cf3","html_url":"https://github.com/jacquev6/PyGithub/commit/49a69c9425789cfb21c49888a144b123ae564cf3","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/49a69c9425789cfb21c49888a144b123ae564cf3/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"044a000d7647e9134c69378f760ff1a2bd141f4d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/044a000d7647e9134c69378f760ff1a2bd141f4d","html_url":"https://github.com/jacquev6/PyGithub/commit/044a000d7647e9134c69378f760ff1a2bd141f4d"}]},{"sha":"8f2ba4f522dbae090b8287663a9a1a88283803b4","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:13:22Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:13:22Z"},"message":"Update IssueComment.py","tree":{"sha":"d7287eda45c3e008132a1650f49dbf124b50bc56","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d7287eda45c3e008132a1650f49dbf124b50bc56"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/8f2ba4f522dbae090b8287663a9a1a88283803b4","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8f2ba4f522dbae090b8287663a9a1a88283803b4","html_url":"https://github.com/jacquev6/PyGithub/commit/8f2ba4f522dbae090b8287663a9a1a88283803b4","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8f2ba4f522dbae090b8287663a9a1a88283803b4/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"49a69c9425789cfb21c49888a144b123ae564cf3","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/49a69c9425789cfb21c49888a144b123ae564cf3","html_url":"https://github.com/jacquev6/PyGithub/commit/49a69c9425789cfb21c49888a144b123ae564cf3"}]},{"sha":"7d40b9eae87fb1631f358e3c09a9d691a942f258","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:17:26Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:17:26Z"},"message":"Update IssueEvent.py","tree":{"sha":"4171bd3cc8c8ca69c351ea2bf6b5d19900d6c1c1","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/4171bd3cc8c8ca69c351ea2bf6b5d19900d6c1c1"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/7d40b9eae87fb1631f358e3c09a9d691a942f258","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/7d40b9eae87fb1631f358e3c09a9d691a942f258","html_url":"https://github.com/jacquev6/PyGithub/commit/7d40b9eae87fb1631f358e3c09a9d691a942f258","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/7d40b9eae87fb1631f358e3c09a9d691a942f258/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"8f2ba4f522dbae090b8287663a9a1a88283803b4","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8f2ba4f522dbae090b8287663a9a1a88283803b4","html_url":"https://github.com/jacquev6/PyGithub/commit/8f2ba4f522dbae090b8287663a9a1a88283803b4"}]},{"sha":"175488270a65a97a42c7bc3fd0bf42676ea4a6e3","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:21:22Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:21:22Z"},"message":"Update Label.py","tree":{"sha":"b2fb450a7dfd492b40bca942f761615a1ac6a342","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/b2fb450a7dfd492b40bca942f761615a1ac6a342"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/175488270a65a97a42c7bc3fd0bf42676ea4a6e3","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/175488270a65a97a42c7bc3fd0bf42676ea4a6e3","html_url":"https://github.com/jacquev6/PyGithub/commit/175488270a65a97a42c7bc3fd0bf42676ea4a6e3","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/175488270a65a97a42c7bc3fd0bf42676ea4a6e3/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"7d40b9eae87fb1631f358e3c09a9d691a942f258","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/7d40b9eae87fb1631f358e3c09a9d691a942f258","html_url":"https://github.com/jacquev6/PyGithub/commit/7d40b9eae87fb1631f358e3c09a9d691a942f258"}]},{"sha":"e4baf577ed5445bbc156c123ccbd7da3c1a3b650","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:24:27Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:24:27Z"},"message":"Update Milestone.py","tree":{"sha":"6cd4d4a0cc49e8a0ecacc793fccdf99e66668cd2","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6cd4d4a0cc49e8a0ecacc793fccdf99e66668cd2"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e4baf577ed5445bbc156c123ccbd7da3c1a3b650","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e4baf577ed5445bbc156c123ccbd7da3c1a3b650","html_url":"https://github.com/jacquev6/PyGithub/commit/e4baf577ed5445bbc156c123ccbd7da3c1a3b650","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e4baf577ed5445bbc156c123ccbd7da3c1a3b650/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"175488270a65a97a42c7bc3fd0bf42676ea4a6e3","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/175488270a65a97a42c7bc3fd0bf42676ea4a6e3","html_url":"https://github.com/jacquev6/PyGithub/commit/175488270a65a97a42c7bc3fd0bf42676ea4a6e3"}]},{"sha":"ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:57:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:57:10Z"},"message":"Update NamedUser.py","tree":{"sha":"22c59fcb82b68071233ebe394ed249d85304b589","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/22c59fcb82b68071233ebe394ed249d85304b589"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","html_url":"https://github.com/jacquev6/PyGithub/commit/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"e4baf577ed5445bbc156c123ccbd7da3c1a3b650","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e4baf577ed5445bbc156c123ccbd7da3c1a3b650","html_url":"https://github.com/jacquev6/PyGithub/commit/e4baf577ed5445bbc156c123ccbd7da3c1a3b650"}]},{"sha":"6cb6e8d232f84e7456c184a4cd055281bb0dba07","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:58:25Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T08:58:25Z"},"message":"Update Notification.py","tree":{"sha":"12744defe09c67111d1ce8454619db76441c74c2","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/12744defe09c67111d1ce8454619db76441c74c2"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6cb6e8d232f84e7456c184a4cd055281bb0dba07","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb6e8d232f84e7456c184a4cd055281bb0dba07","html_url":"https://github.com/jacquev6/PyGithub/commit/6cb6e8d232f84e7456c184a4cd055281bb0dba07","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb6e8d232f84e7456c184a4cd055281bb0dba07/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c","html_url":"https://github.com/jacquev6/PyGithub/commit/ba6800ada4213828bdb4f5d54d14e0d4c3c25c4c"}]},{"sha":"ef912af6b79414351de245aa7a6919cad461ca50","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:01:13Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:01:13Z"},"message":"Update Organization.py","tree":{"sha":"25eb4e93c5716005647e58fc78b02258d819e3b8","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/25eb4e93c5716005647e58fc78b02258d819e3b8"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ef912af6b79414351de245aa7a6919cad461ca50","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ef912af6b79414351de245aa7a6919cad461ca50","html_url":"https://github.com/jacquev6/PyGithub/commit/ef912af6b79414351de245aa7a6919cad461ca50","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ef912af6b79414351de245aa7a6919cad461ca50/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"6cb6e8d232f84e7456c184a4cd055281bb0dba07","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb6e8d232f84e7456c184a4cd055281bb0dba07","html_url":"https://github.com/jacquev6/PyGithub/commit/6cb6e8d232f84e7456c184a4cd055281bb0dba07"}]},{"sha":"0e842637a6052129b1706419a66597f419b4b2ba","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:03:41Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:03:41Z"},"message":"Update PullRequest.py","tree":{"sha":"e3ecc0ea2dd602e1eab33f6c384007cd795baa3b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e3ecc0ea2dd602e1eab33f6c384007cd795baa3b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0e842637a6052129b1706419a66597f419b4b2ba","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e842637a6052129b1706419a66597f419b4b2ba","html_url":"https://github.com/jacquev6/PyGithub/commit/0e842637a6052129b1706419a66597f419b4b2ba","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e842637a6052129b1706419a66597f419b4b2ba/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"ef912af6b79414351de245aa7a6919cad461ca50","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ef912af6b79414351de245aa7a6919cad461ca50","html_url":"https://github.com/jacquev6/PyGithub/commit/ef912af6b79414351de245aa7a6919cad461ca50"}]},{"sha":"3c1d17cd649e79ff7c97d2c68daffbf6529ed969","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:13:03Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:13:03Z"},"message":"Update Repository.py","tree":{"sha":"95d2cbe17bc8a248b9a62f29bff961a4fbf9ecfe","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/95d2cbe17bc8a248b9a62f29bff961a4fbf9ecfe"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/3c1d17cd649e79ff7c97d2c68daffbf6529ed969","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3c1d17cd649e79ff7c97d2c68daffbf6529ed969","html_url":"https://github.com/jacquev6/PyGithub/commit/3c1d17cd649e79ff7c97d2c68daffbf6529ed969","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3c1d17cd649e79ff7c97d2c68daffbf6529ed969/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"0e842637a6052129b1706419a66597f419b4b2ba","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0e842637a6052129b1706419a66597f419b4b2ba","html_url":"https://github.com/jacquev6/PyGithub/commit/0e842637a6052129b1706419a66597f419b4b2ba"}]},{"sha":"1070631c73f02e1ee6b03c55155086d33791499e","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:18:01Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:18:01Z"},"message":"Update Team.py","tree":{"sha":"0cb42345203225124267c4f866f3747b93e6277c","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/0cb42345203225124267c4f866f3747b93e6277c"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1070631c73f02e1ee6b03c55155086d33791499e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1070631c73f02e1ee6b03c55155086d33791499e","html_url":"https://github.com/jacquev6/PyGithub/commit/1070631c73f02e1ee6b03c55155086d33791499e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1070631c73f02e1ee6b03c55155086d33791499e/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"3c1d17cd649e79ff7c97d2c68daffbf6529ed969","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3c1d17cd649e79ff7c97d2c68daffbf6529ed969","html_url":"https://github.com/jacquev6/PyGithub/commit/3c1d17cd649e79ff7c97d2c68daffbf6529ed969"}]},{"sha":"c4e8972be12ba249a06cd4c40499e0b32011e7f5","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:19:11Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:19:11Z"},"message":"Update UserKey.py","tree":{"sha":"dc077fcaedfee625d520412e41485893c351c150","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/dc077fcaedfee625d520412e41485893c351c150"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c4e8972be12ba249a06cd4c40499e0b32011e7f5","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c4e8972be12ba249a06cd4c40499e0b32011e7f5","html_url":"https://github.com/jacquev6/PyGithub/commit/c4e8972be12ba249a06cd4c40499e0b32011e7f5","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c4e8972be12ba249a06cd4c40499e0b32011e7f5/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"1070631c73f02e1ee6b03c55155086d33791499e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1070631c73f02e1ee6b03c55155086d33791499e","html_url":"https://github.com/jacquev6/PyGithub/commit/1070631c73f02e1ee6b03c55155086d33791499e"}]},{"sha":"8a301701db354408b63273f78ece6887a1677e55","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:25:29Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:25:29Z"},"message":"Remove helper method in PaginatedList.py","tree":{"sha":"639f5560d925aa1b19e29f3eeb74c7e5f11174cc","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/639f5560d925aa1b19e29f3eeb74c7e5f11174cc"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/8a301701db354408b63273f78ece6887a1677e55","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a301701db354408b63273f78ece6887a1677e55","html_url":"https://github.com/jacquev6/PyGithub/commit/8a301701db354408b63273f78ece6887a1677e55","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a301701db354408b63273f78ece6887a1677e55/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"c4e8972be12ba249a06cd4c40499e0b32011e7f5","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c4e8972be12ba249a06cd4c40499e0b32011e7f5","html_url":"https://github.com/jacquev6/PyGithub/commit/c4e8972be12ba249a06cd4c40499e0b32011e7f5"}]},{"sha":"3f6d1b6b705de6ea9632021987e55d41875f0102","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:27:37Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:27:37Z"},"message":"Remove helper method in Legacy.py","tree":{"sha":"cdc64db71461393d95d58e89a9a0387fe5d3b447","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/cdc64db71461393d95d58e89a9a0387fe5d3b447"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/3f6d1b6b705de6ea9632021987e55d41875f0102","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3f6d1b6b705de6ea9632021987e55d41875f0102","html_url":"https://github.com/jacquev6/PyGithub/commit/3f6d1b6b705de6ea9632021987e55d41875f0102","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3f6d1b6b705de6ea9632021987e55d41875f0102/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"8a301701db354408b63273f78ece6887a1677e55","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a301701db354408b63273f78ece6887a1677e55","html_url":"https://github.com/jacquev6/PyGithub/commit/8a301701db354408b63273f78ece6887a1677e55"}]},{"sha":"30d9d499a1b44552ab9a28ef7317aa2098daafd7","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:32:32Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:32:32Z"},"message":"Clean up","tree":{"sha":"971191c9d4fbd001727beeeb2ff9a482b80e2b39","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/971191c9d4fbd001727beeeb2ff9a482b80e2b39"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/30d9d499a1b44552ab9a28ef7317aa2098daafd7","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/30d9d499a1b44552ab9a28ef7317aa2098daafd7","html_url":"https://github.com/jacquev6/PyGithub/commit/30d9d499a1b44552ab9a28ef7317aa2098daafd7","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/30d9d499a1b44552ab9a28ef7317aa2098daafd7/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"3f6d1b6b705de6ea9632021987e55d41875f0102","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3f6d1b6b705de6ea9632021987e55d41875f0102","html_url":"https://github.com/jacquev6/PyGithub/commit/3f6d1b6b705de6ea9632021987e55d41875f0102"}]},{"sha":"912bec79d2dd2479e5e32118c66ee9a647b46332","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:45:01Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T09:45:01Z"},"message":"Update copyright information","tree":{"sha":"9ce5267aa0ed70277a09594a84c881e9e04da2e5","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9ce5267aa0ed70277a09594a84c881e9e04da2e5"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/912bec79d2dd2479e5e32118c66ee9a647b46332","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/912bec79d2dd2479e5e32118c66ee9a647b46332","html_url":"https://github.com/jacquev6/PyGithub/commit/912bec79d2dd2479e5e32118c66ee9a647b46332","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/912bec79d2dd2479e5e32118c66ee9a647b46332/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"30d9d499a1b44552ab9a28ef7317aa2098daafd7","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/30d9d499a1b44552ab9a28ef7317aa2098daafd7","html_url":"https://github.com/jacquev6/PyGithub/commit/30d9d499a1b44552ab9a28ef7317aa2098daafd7"}]},{"sha":"1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T11:25:05Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T11:25:05Z"},"message":"Add debug / test mechanism","tree":{"sha":"6cc4f7080010a73043a4d743a488b207f7117f42","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6cc4f7080010a73043a4d743a488b207f7117f42"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","html_url":"https://github.com/jacquev6/PyGithub/commit/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"912bec79d2dd2479e5e32118c66ee9a647b46332","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/912bec79d2dd2479e5e32118c66ee9a647b46332","html_url":"https://github.com/jacquev6/PyGithub/commit/912bec79d2dd2479e5e32118c66ee9a647b46332"}]},{"sha":"e06257d06017b72bb57b15b043e6f16d4b6eb568","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T12:58:29Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T12:58:29Z"},"message":"Enable debug in TestCase","tree":{"sha":"c99afd32d144d223b8dea8dc3d1bc612a5e7b440","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/c99afd32d144d223b8dea8dc3d1bc612a5e7b440"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e06257d06017b72bb57b15b043e6f16d4b6eb568","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e06257d06017b72bb57b15b043e6f16d4b6eb568","html_url":"https://github.com/jacquev6/PyGithub/commit/e06257d06017b72bb57b15b043e6f16d4b6eb568","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e06257d06017b72bb57b15b043e6f16d4b6eb568/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80","html_url":"https://github.com/jacquev6/PyGithub/commit/1d18ea75cce3ca6aeff03d0343e65b2f13b97f80"}]},{"sha":"aa3025271cd918883b31a42fb7b4ce03027b805c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T13:11:12Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T13:11:12Z"},"message":"Assert response headers","tree":{"sha":"9e5ec5a1f82ccfe07e2abeb586b7d39b98392df2","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9e5ec5a1f82ccfe07e2abeb586b7d39b98392df2"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/aa3025271cd918883b31a42fb7b4ce03027b805c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/aa3025271cd918883b31a42fb7b4ce03027b805c","html_url":"https://github.com/jacquev6/PyGithub/commit/aa3025271cd918883b31a42fb7b4ce03027b805c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/aa3025271cd918883b31a42fb7b4ce03027b805c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"e06257d06017b72bb57b15b043e6f16d4b6eb568","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e06257d06017b72bb57b15b043e6f16d4b6eb568","html_url":"https://github.com/jacquev6/PyGithub/commit/e06257d06017b72bb57b15b043e6f16d4b6eb568"}]},{"sha":"b71329e560795a4df84cb419178ef660824f4c0d","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T14:25:20Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T14:25:20Z"},"message":"Implement data persistence","tree":{"sha":"e617e5b89efd45b9839d8e7f61619f00974367bb","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e617e5b89efd45b9839d8e7f61619f00974367bb"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/b71329e560795a4df84cb419178ef660824f4c0d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b71329e560795a4df84cb419178ef660824f4c0d","html_url":"https://github.com/jacquev6/PyGithub/commit/b71329e560795a4df84cb419178ef660824f4c0d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b71329e560795a4df84cb419178ef660824f4c0d/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"aa3025271cd918883b31a42fb7b4ce03027b805c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/aa3025271cd918883b31a42fb7b4ce03027b805c","html_url":"https://github.com/jacquev6/PyGithub/commit/aa3025271cd918883b31a42fb7b4ce03027b805c"}]},{"sha":"bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:01:40Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:01:40Z"},"message":"Add update() method","tree":{"sha":"790ed722bb219aeb47c13f073a41ccb4e67a0ae0","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/790ed722bb219aeb47c13f073a41ccb4e67a0ae0"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","html_url":"https://github.com/jacquev6/PyGithub/commit/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"b71329e560795a4df84cb419178ef660824f4c0d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/b71329e560795a4df84cb419178ef660824f4c0d","html_url":"https://github.com/jacquev6/PyGithub/commit/b71329e560795a4df84cb419178ef660824f4c0d"}]},{"sha":"1e9ec2df089973db73aaf99b4ef147efd4614e7c","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:04:07Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:04:07Z"},"message":"Add NotModifiedException class","tree":{"sha":"68bf8de0788f5e0a6675d07bceaeb114183315ba","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/68bf8de0788f5e0a6675d07bceaeb114183315ba"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1e9ec2df089973db73aaf99b4ef147efd4614e7c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1e9ec2df089973db73aaf99b4ef147efd4614e7c","html_url":"https://github.com/jacquev6/PyGithub/commit/1e9ec2df089973db73aaf99b4ef147efd4614e7c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1e9ec2df089973db73aaf99b4ef147efd4614e7c/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6","html_url":"https://github.com/jacquev6/PyGithub/commit/bd7abb58772ae1a61fd7eb44308a3a2f60432ad6"}]},{"sha":"6fd05baf6bea732dd846e08c40891c28060e7c64","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:09:30Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:09:30Z"},"message":"Handle response code 304","tree":{"sha":"8601556063c365eb7c636a3459eca81b5e717e21","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/8601556063c365eb7c636a3459eca81b5e717e21"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6fd05baf6bea732dd846e08c40891c28060e7c64","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6fd05baf6bea732dd846e08c40891c28060e7c64","html_url":"https://github.com/jacquev6/PyGithub/commit/6fd05baf6bea732dd846e08c40891c28060e7c64","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6fd05baf6bea732dd846e08c40891c28060e7c64/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"1e9ec2df089973db73aaf99b4ef147efd4614e7c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1e9ec2df089973db73aaf99b4ef147efd4614e7c","html_url":"https://github.com/jacquev6/PyGithub/commit/1e9ec2df089973db73aaf99b4ef147efd4614e7c"}]},{"sha":"5b09f6c82191601cad92076ad4761fe927c511ed","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:17:59Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T15:17:59Z"},"message":"Implement conditional request","tree":{"sha":"d6c3d2b807635ecd9a9129b1a99d0e2f6758d440","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d6c3d2b807635ecd9a9129b1a99d0e2f6758d440"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/5b09f6c82191601cad92076ad4761fe927c511ed","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5b09f6c82191601cad92076ad4761fe927c511ed","html_url":"https://github.com/jacquev6/PyGithub/commit/5b09f6c82191601cad92076ad4761fe927c511ed","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5b09f6c82191601cad92076ad4761fe927c511ed/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"6fd05baf6bea732dd846e08c40891c28060e7c64","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6fd05baf6bea732dd846e08c40891c28060e7c64","html_url":"https://github.com/jacquev6/PyGithub/commit/6fd05baf6bea732dd846e08c40891c28060e7c64"}]},{"sha":"1955f7b39d4aeef19356a8269e6430537fcc3006","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:40:21Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T20:24:32Z"},"message":"Use POST /gists/:id/forks instead of POST /gists/:id/fork","tree":{"sha":"96255698cf321052b8d1990af1b282e7e7d9b094","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/96255698cf321052b8d1990af1b282e7e7d9b094"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1955f7b39d4aeef19356a8269e6430537fcc3006","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1955f7b39d4aeef19356a8269e6430537fcc3006","html_url":"https://github.com/jacquev6/PyGithub/commit/1955f7b39d4aeef19356a8269e6430537fcc3006","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1955f7b39d4aeef19356a8269e6430537fcc3006/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"ed781f8b1b96e1d2a342d36ca53114ea28862fa8","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ed781f8b1b96e1d2a342d36ca53114ea28862fa8","html_url":"https://github.com/jacquev6/PyGithub/commit/ed781f8b1b96e1d2a342d36ca53114ea28862fa8"}]},{"sha":"0f369ba218414beb8d782904b1f09d4711c82cb7","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T16:51:09Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T20:25:44Z"},"message":"Use POST /repos/:owner/:repo/hooks/:id/tests instead of POST /repos/:owner/:repo/hooks/:id/test","tree":{"sha":"9df3a12c5a595613c179195787593cd18f50df60","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/9df3a12c5a595613c179195787593cd18f50df60"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0f369ba218414beb8d782904b1f09d4711c82cb7","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f369ba218414beb8d782904b1f09d4711c82cb7","html_url":"https://github.com/jacquev6/PyGithub/commit/0f369ba218414beb8d782904b1f09d4711c82cb7","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f369ba218414beb8d782904b1f09d4711c82cb7/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"1955f7b39d4aeef19356a8269e6430537fcc3006","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1955f7b39d4aeef19356a8269e6430537fcc3006","html_url":"https://github.com/jacquev6/PyGithub/commit/1955f7b39d4aeef19356a8269e6430537fcc3006"}]},{"sha":"e384a52971a8452b9c8eb32ed862e88cd828ee8e","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T19:43:08Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T20:26:58Z"},"message":"NamedUser.has_in_following","tree":{"sha":"becbc15254d47f078ee3e70bee997cea6ad201d0","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/becbc15254d47f078ee3e70bee997cea6ad201d0"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e384a52971a8452b9c8eb32ed862e88cd828ee8e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e384a52971a8452b9c8eb32ed862e88cd828ee8e","html_url":"https://github.com/jacquev6/PyGithub/commit/e384a52971a8452b9c8eb32ed862e88cd828ee8e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e384a52971a8452b9c8eb32ed862e88cd828ee8e/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"0f369ba218414beb8d782904b1f09d4711c82cb7","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f369ba218414beb8d782904b1f09d4711c82cb7","html_url":"https://github.com/jacquev6/PyGithub/commit/0f369ba218414beb8d782904b1f09d4711c82cb7"}]},{"sha":"1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T19:54:00Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-21T20:28:15Z"},"message":"Github.get_repos (to get all public repositories)","tree":{"sha":"3164e655a882efc8233e688223b17703f7ee0e81","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/3164e655a882efc8233e688223b17703f7ee0e81"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","html_url":"https://github.com/jacquev6/PyGithub/commit/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"e384a52971a8452b9c8eb32ed862e88cd828ee8e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e384a52971a8452b9c8eb32ed862e88cd828ee8e","html_url":"https://github.com/jacquev6/PyGithub/commit/e384a52971a8452b9c8eb32ed862e88cd828ee8e"}]},{"sha":"70a7e9c83dec2bf6b549dc5c77d30b53afb32457","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T23:45:27Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-21T23:45:27Z"},"message":"Fix update","tree":{"sha":"f99d30ab74ea95fedefb33a8b1b2c77903fbd698","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/f99d30ab74ea95fedefb33a8b1b2c77903fbd698"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/70a7e9c83dec2bf6b549dc5c77d30b53afb32457","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/70a7e9c83dec2bf6b549dc5c77d30b53afb32457","html_url":"https://github.com/jacquev6/PyGithub/commit/70a7e9c83dec2bf6b549dc5c77d30b53afb32457","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/70a7e9c83dec2bf6b549dc5c77d30b53afb32457/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"5b09f6c82191601cad92076ad4761fe927c511ed","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5b09f6c82191601cad92076ad4761fe927c511ed","html_url":"https://github.com/jacquev6/PyGithub/commit/5b09f6c82191601cad92076ad4761fe927c511ed"}]},{"sha":"d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-22T00:45:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-22T00:45:10Z"},"message":"Add test record helper","tree":{"sha":"e6e15fccb5b256bba3db1d4fc89088b733de227b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e6e15fccb5b256bba3db1d4fc89088b733de227b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","html_url":"https://github.com/jacquev6/PyGithub/commit/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"70a7e9c83dec2bf6b549dc5c77d30b53afb32457","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/70a7e9c83dec2bf6b549dc5c77d30b53afb32457","html_url":"https://github.com/jacquev6/PyGithub/commit/70a7e9c83dec2bf6b549dc5c77d30b53afb32457"}]},{"sha":"c7593e84c4a92a044b717b7311c2b6ad8d9a5917","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-22T02:20:10Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-22T02:20:10Z"},"message":"Add test case for conditional request","tree":{"sha":"bbf62558b39720fc7acab1c6b26e4b9260cdc897","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/bbf62558b39720fc7acab1c6b26e4b9260cdc897"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c7593e84c4a92a044b717b7311c2b6ad8d9a5917","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7593e84c4a92a044b717b7311c2b6ad8d9a5917","html_url":"https://github.com/jacquev6/PyGithub/commit/c7593e84c4a92a044b717b7311c2b6ad8d9a5917","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7593e84c4a92a044b717b7311c2b6ad8d9a5917/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7","html_url":"https://github.com/jacquev6/PyGithub/commit/d457afd23ccb47d9f30f09a6ca2a8e32f17dccc7"}]},{"sha":"5c475c7683b2a57ee053d35586248f24febb6ebe","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:12:38Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:12:38Z"},"message":"First review of #192 (pep8, headers... nothing important)\n\n./manage.sh check\n./manage.sh fix_headers","tree":{"sha":"c874a52834343436bb9e1062a9edb11739d0de2b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/c874a52834343436bb9e1062a9edb11739d0de2b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/5c475c7683b2a57ee053d35586248f24febb6ebe","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5c475c7683b2a57ee053d35586248f24febb6ebe","html_url":"https://github.com/jacquev6/PyGithub/commit/5c475c7683b2a57ee053d35586248f24febb6ebe","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5c475c7683b2a57ee053d35586248f24febb6ebe/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"aa3025271cd918883b31a42fb7b4ce03027b805c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/aa3025271cd918883b31a42fb7b4ce03027b805c","html_url":"https://github.com/jacquev6/PyGithub/commit/aa3025271cd918883b31a42fb7b4ce03027b805c"}]},{"sha":"f2de1fbfcccd1bbb3da722489d361d1937e09860","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:22:07Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:22:07Z"},"message":"Don't fix headers in /build","tree":{"sha":"6151d6667cf979d47a44e9a4852f9e5894eea19a","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6151d6667cf979d47a44e9a4852f9e5894eea19a"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/f2de1fbfcccd1bbb3da722489d361d1937e09860","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2de1fbfcccd1bbb3da722489d361d1937e09860","html_url":"https://github.com/jacquev6/PyGithub/commit/f2de1fbfcccd1bbb3da722489d361d1937e09860","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2de1fbfcccd1bbb3da722489d361d1937e09860/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb","html_url":"https://github.com/jacquev6/PyGithub/commit/1c993d3a5f54cd5c30c6e3407dfc216bdcf7c7cb"}]},{"sha":"8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:30:14Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:30:14Z"},"message":"Merge branch 'topic/RememberHeaders' into develop (#192)\n\nConflicts:\n\tgithub/Issue.py\n\tgithub/MainClass.py\n\tgithub/PaginatedList.py\n\tgithub/Repository.py\n\tgithub/Requester.py","tree":{"sha":"61011f6ebafc003fa6561ed990691d0c21611ea2","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/61011f6ebafc003fa6561ed990691d0c21611ea2"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","html_url":"https://github.com/jacquev6/PyGithub/commit/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"f2de1fbfcccd1bbb3da722489d361d1937e09860","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2de1fbfcccd1bbb3da722489d361d1937e09860","html_url":"https://github.com/jacquev6/PyGithub/commit/f2de1fbfcccd1bbb3da722489d361d1937e09860"},{"sha":"5c475c7683b2a57ee053d35586248f24febb6ebe","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/5c475c7683b2a57ee053d35586248f24febb6ebe","html_url":"https://github.com/jacquev6/PyGithub/commit/5c475c7683b2a57ee053d35586248f24febb6ebe"}]},{"sha":"ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:44:38Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T08:44:38Z"},"message":"Fix merge of #192\n\nOne branch modified signature of constructors,\nanother branch added a call to a constructor.","tree":{"sha":"ea54567a0eff56ab2c1701783a2d46a9cd9b1b3d","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/ea54567a0eff56ab2c1701783a2d46a9cd9b1b3d"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","html_url":"https://github.com/jacquev6/PyGithub/commit/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd","html_url":"https://github.com/jacquev6/PyGithub/commit/8a2624e3a1591a36ecf5afdc6fcc84443d8145dd"}]},{"sha":"cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T09:01:51Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T09:01:51Z"},"message":"Merge branch 'develop' into topic/ConditionalRequest\n\nConflicts:\n\t.gitignore\n\tgithub/Requester.py","tree":{"sha":"0d8bb0e1e0d530a2061d0d898a96b0f0ad6a5f25","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/0d8bb0e1e0d530a2061d0d898a96b0f0ad6a5f25"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","html_url":"https://github.com/jacquev6/PyGithub/commit/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"c7593e84c4a92a044b717b7311c2b6ad8d9a5917","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c7593e84c4a92a044b717b7311c2b6ad8d9a5917","html_url":"https://github.com/jacquev6/PyGithub/commit/c7593e84c4a92a044b717b7311c2b6ad8d9a5917"},{"sha":"ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","html_url":"https://github.com/jacquev6/PyGithub/commit/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008"}]},{"sha":"1787765a61958617d47e764a0bea2acd70c84f72","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T09:41:15Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T09:41:15Z"},"message":"Review of #189: use dict.get\n\nhttp://docs.python.org/2/library/stdtypes.html#dict.get","tree":{"sha":"7cb1da804d8cec4692c26b5a0d35827c151ddde4","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/7cb1da804d8cec4692c26b5a0d35827c151ddde4"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1787765a61958617d47e764a0bea2acd70c84f72","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1787765a61958617d47e764a0bea2acd70c84f72","html_url":"https://github.com/jacquev6/PyGithub/commit/1787765a61958617d47e764a0bea2acd70c84f72","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1787765a61958617d47e764a0bea2acd70c84f72/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5","html_url":"https://github.com/jacquev6/PyGithub/commit/cc1bcd5f2da1982a0836a488cf321d363bfcf5b5"}]},{"sha":"0f74e4389b3c0fa57a83083ecfbbf5c331022674","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T10:12:38Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-22T10:12:38Z"},"message":"Review of #189: pep8, copyrights, style, remarks\n\nFor remarks, run: git grep \"#189\"\nThey are only my first thoughts while reviewing this pull request,\nand should be reviewed themselves.","tree":{"sha":"6704a63e77b81165cb7f8ff4c32bd8455fcdfbdb","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6704a63e77b81165cb7f8ff4c32bd8455fcdfbdb"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0f74e4389b3c0fa57a83083ecfbbf5c331022674","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f74e4389b3c0fa57a83083ecfbbf5c331022674","html_url":"https://github.com/jacquev6/PyGithub/commit/0f74e4389b3c0fa57a83083ecfbbf5c331022674","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f74e4389b3c0fa57a83083ecfbbf5c331022674/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"1787765a61958617d47e764a0bea2acd70c84f72","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1787765a61958617d47e764a0bea2acd70c84f72","html_url":"https://github.com/jacquev6/PyGithub/commit/1787765a61958617d47e764a0bea2acd70c84f72"}]},{"sha":"fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:32:47Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:32:47Z"},"message":"Fix remarks on #189 to #193","tree":{"sha":"acda548d54ec2929d3f556bb09d72082c6cce74c","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/acda548d54ec2929d3f556bb09d72082c6cce74c"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","html_url":"https://github.com/jacquev6/PyGithub/commit/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"0f74e4389b3c0fa57a83083ecfbbf5c331022674","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0f74e4389b3c0fa57a83083ecfbbf5c331022674","html_url":"https://github.com/jacquev6/PyGithub/commit/0f74e4389b3c0fa57a83083ecfbbf5c331022674"}]},{"sha":"0413c87c12e688fb4fc38d978a2f275ef791cd48","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:39:19Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:39:19Z"},"message":"Remove _record_.py (#193)\n\nAccording to https://github.com/jacquev6/PyGithub/commit/0f74e4389b3c0fa57a83083ecfbbf5c331022674#commitcomment-3919786","tree":{"sha":"97108cad4736d71906a05fc573936659fb81f386","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/97108cad4736d71906a05fc573936659fb81f386"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/0413c87c12e688fb4fc38d978a2f275ef791cd48","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0413c87c12e688fb4fc38d978a2f275ef791cd48","html_url":"https://github.com/jacquev6/PyGithub/commit/0413c87c12e688fb4fc38d978a2f275ef791cd48","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0413c87c12e688fb4fc38d978a2f275ef791cd48/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c","html_url":"https://github.com/jacquev6/PyGithub/commit/fb7325884ee0b8ae73f47bf13c6f36cacbc3131c"}]},{"sha":"bc3b819ac554a2132427c9ffe629ef371511213e","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:50:51Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T07:50:51Z"},"message":"Separate tests for conditional requests (#193)","tree":{"sha":"cebebf12f44ca09fa382c2673f9577bce01d09f8","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/cebebf12f44ca09fa382c2673f9577bce01d09f8"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/bc3b819ac554a2132427c9ffe629ef371511213e","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bc3b819ac554a2132427c9ffe629ef371511213e","html_url":"https://github.com/jacquev6/PyGithub/commit/bc3b819ac554a2132427c9ffe629ef371511213e","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bc3b819ac554a2132427c9ffe629ef371511213e/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"0413c87c12e688fb4fc38d978a2f275ef791cd48","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/0413c87c12e688fb4fc38d978a2f275ef791cd48","html_url":"https://github.com/jacquev6/PyGithub/commit/0413c87c12e688fb4fc38d978a2f275ef791cd48"}]},{"sha":"bae0a37d180a4b224c6aa808d03722908109c57d","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:10:35Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:10:35Z"},"message":"#193: Don't use a try-except for a usual execution flow in GithubObject.update\n\n(and factorize assignment of headers in _storeAndUseAttributes,\nas done for rawData)","tree":{"sha":"d56e13d46c851d333baf0d69053dc6527f1e04d7","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d56e13d46c851d333baf0d69053dc6527f1e04d7"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/bae0a37d180a4b224c6aa808d03722908109c57d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bae0a37d180a4b224c6aa808d03722908109c57d","html_url":"https://github.com/jacquev6/PyGithub/commit/bae0a37d180a4b224c6aa808d03722908109c57d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bae0a37d180a4b224c6aa808d03722908109c57d/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"bc3b819ac554a2132427c9ffe629ef371511213e","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bc3b819ac554a2132427c9ffe629ef371511213e","html_url":"https://github.com/jacquev6/PyGithub/commit/bc3b819ac554a2132427c9ffe629ef371511213e"}]},{"sha":"03d7fb012e9d032165c43f93a4c67bc29af9366f","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:15:17Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:15:17Z"},"message":"#193: Add remarks","tree":{"sha":"887977aa41abc6624fdea3d1ffd185decc57ab90","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/887977aa41abc6624fdea3d1ffd185decc57ab90"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/03d7fb012e9d032165c43f93a4c67bc29af9366f","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/03d7fb012e9d032165c43f93a4c67bc29af9366f","html_url":"https://github.com/jacquev6/PyGithub/commit/03d7fb012e9d032165c43f93a4c67bc29af9366f","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/03d7fb012e9d032165c43f93a4c67bc29af9366f/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"bae0a37d180a4b224c6aa808d03722908109c57d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/bae0a37d180a4b224c6aa808d03722908109c57d","html_url":"https://github.com/jacquev6/PyGithub/commit/bae0a37d180a4b224c6aa808d03722908109c57d"}]},{"sha":"64cf539c83174f95b3410c7decd2549424385ce1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:31:01Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T09:31:01Z"},"message":"#193: Add a param to Requester.requestXxx for request headers","tree":{"sha":"d8ce377a13245803f223ae5bf50c09db0544a1be","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d8ce377a13245803f223ae5bf50c09db0544a1be"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/64cf539c83174f95b3410c7decd2549424385ce1","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/64cf539c83174f95b3410c7decd2549424385ce1","html_url":"https://github.com/jacquev6/PyGithub/commit/64cf539c83174f95b3410c7decd2549424385ce1","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/64cf539c83174f95b3410c7decd2549424385ce1/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"03d7fb012e9d032165c43f93a4c67bc29af9366f","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/03d7fb012e9d032165c43f93a4c67bc29af9366f","html_url":"https://github.com/jacquev6/PyGithub/commit/03d7fb012e9d032165c43f93a4c67bc29af9366f"}]},{"sha":"e084b5138106d4ad371a69ca9519862f09c855ae","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T12:51:34Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T12:51:34Z"},"message":"#193: Fix test coverage","tree":{"sha":"e0dc9f5f816e7e6503d60b39b69d5652bd2b77ce","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e0dc9f5f816e7e6503d60b39b69d5652bd2b77ce"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/e084b5138106d4ad371a69ca9519862f09c855ae","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e084b5138106d4ad371a69ca9519862f09c855ae","html_url":"https://github.com/jacquev6/PyGithub/commit/e084b5138106d4ad371a69ca9519862f09c855ae","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e084b5138106d4ad371a69ca9519862f09c855ae/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"64cf539c83174f95b3410c7decd2549424385ce1","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/64cf539c83174f95b3410c7decd2549424385ce1","html_url":"https://github.com/jacquev6/PyGithub/commit/64cf539c83174f95b3410c7decd2549424385ce1"}]},{"sha":"020a3c9917f42d98c1761527825061d2db8352fd","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T16:45:16Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T16:45:16Z"},"message":"Move method update to CompletableGithubObject","tree":{"sha":"4c3e987d82799789d0c2586e509cea8c71e0029b","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/4c3e987d82799789d0c2586e509cea8c71e0029b"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/020a3c9917f42d98c1761527825061d2db8352fd","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/020a3c9917f42d98c1761527825061d2db8352fd","html_url":"https://github.com/jacquev6/PyGithub/commit/020a3c9917f42d98c1761527825061d2db8352fd","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/020a3c9917f42d98c1761527825061d2db8352fd/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"e084b5138106d4ad371a69ca9519862f09c855ae","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/e084b5138106d4ad371a69ca9519862f09c855ae","html_url":"https://github.com/jacquev6/PyGithub/commit/e084b5138106d4ad371a69ca9519862f09c855ae"}]},{"sha":"fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T17:05:53Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-08-23T17:05:53Z"},"message":"Move the DEBUG_ON_RESPONSE call to Requester.__requestEncode","tree":{"sha":"a7fbeaacbdba31ceb21a46bedfce268411d8dfb8","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a7fbeaacbdba31ceb21a46bedfce268411d8dfb8"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","html_url":"https://github.com/jacquev6/PyGithub/commit/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"020a3c9917f42d98c1761527825061d2db8352fd","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/020a3c9917f42d98c1761527825061d2db8352fd","html_url":"https://github.com/jacquev6/PyGithub/commit/020a3c9917f42d98c1761527825061d2db8352fd"}]},{"sha":"38b137fb37c0fdc74f8802a4184518e105db9121","commit":{"author":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-23T23:21:41Z"},"committer":{"name":"AKFish","email":"akfish@gmail.com","date":"2013-08-23T23:21:41Z"},"message":"Fix line ending","tree":{"sha":"a4260390d7e3d478aed05009657f4632d25dad84","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/a4260390d7e3d478aed05009657f4632d25dad84"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/38b137fb37c0fdc74f8802a4184518e105db9121","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/38b137fb37c0fdc74f8802a4184518e105db9121","html_url":"https://github.com/jacquev6/PyGithub/commit/38b137fb37c0fdc74f8802a4184518e105db9121","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/38b137fb37c0fdc74f8802a4184518e105db9121/comments","author":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"committer":{"login":"akfish","id":922715,"avatar_url":"https://2.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png","gravatar_id":"12a1b44d4e5c19cee59618084602b112","url":"https://api.github.com/users/akfish","html_url":"https://github.com/akfish","followers_url":"https://api.github.com/users/akfish/followers","following_url":"https://api.github.com/users/akfish/following{/other_user}","gists_url":"https://api.github.com/users/akfish/gists{/gist_id}","starred_url":"https://api.github.com/users/akfish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akfish/subscriptions","organizations_url":"https://api.github.com/users/akfish/orgs","repos_url":"https://api.github.com/users/akfish/repos","events_url":"https://api.github.com/users/akfish/events{/privacy}","received_events_url":"https://api.github.com/users/akfish/received_events","type":"User"},"parents":[{"sha":"fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84","html_url":"https://github.com/jacquev6/PyGithub/commit/fb6980ce36766e4dd1ab03b48ac4b5adf876dc84"}]},{"sha":"3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-04T21:28:44Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-04T21:28:44Z"},"message":"Implement object persistence\n\nThis follows my proposal for #193.\nLargely inspired by AKFish's work.","tree":{"sha":"b6b62d90fe1b65d103b74fe11a8f01f3ddd1851a","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/b6b62d90fe1b65d103b74fe11a8f01f3ddd1851a"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","html_url":"https://github.com/jacquev6/PyGithub/commit/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"38b137fb37c0fdc74f8802a4184518e105db9121","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/38b137fb37c0fdc74f8802a4184518e105db9121","html_url":"https://github.com/jacquev6/PyGithub/commit/38b137fb37c0fdc74f8802a4184518e105db9121"}]},{"sha":"c412d49c9fd28406156dff664a1f848da1e95d0b","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T15:50:57Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T15:50:57Z"},"message":"Adapt to Python 2.5","tree":{"sha":"6c7ed56808fdd9a1a17b38f397fafd0e0cf1ae2e","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6c7ed56808fdd9a1a17b38f397fafd0e0cf1ae2e"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c412d49c9fd28406156dff664a1f848da1e95d0b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c412d49c9fd28406156dff664a1f848da1e95d0b","html_url":"https://github.com/jacquev6/PyGithub/commit/c412d49c9fd28406156dff664a1f848da1e95d0b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c412d49c9fd28406156dff664a1f848da1e95d0b/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4","html_url":"https://github.com/jacquev6/PyGithub/commit/3fe9edf08707d2c289d4e6a05f7521751cf9f8e4"}]},{"sha":"6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T15:53:31Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T15:53:31Z"},"message":"Adapt to Python 2.5 (again:))","tree":{"sha":"7007556096f9edd3ecd48dfe302748ba9d238273","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/7007556096f9edd3ecd48dfe302748ba9d238273"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","html_url":"https://github.com/jacquev6/PyGithub/commit/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"c412d49c9fd28406156dff664a1f848da1e95d0b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c412d49c9fd28406156dff664a1f848da1e95d0b","html_url":"https://github.com/jacquev6/PyGithub/commit/c412d49c9fd28406156dff664a1f848da1e95d0b"}]},{"sha":"d18d1b0354a5c7de920b30ef1e5950a5479dd866","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:01:03Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:01:03Z"},"message":"Update readme","tree":{"sha":"140c1b06794ac9a8130cf3612c604c83f973358f","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/140c1b06794ac9a8130cf3612c604c83f973358f"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/d18d1b0354a5c7de920b30ef1e5950a5479dd866","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d18d1b0354a5c7de920b30ef1e5950a5479dd866","html_url":"https://github.com/jacquev6/PyGithub/commit/d18d1b0354a5c7de920b30ef1e5950a5479dd866","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d18d1b0354a5c7de920b30ef1e5950a5479dd866/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69","html_url":"https://github.com/jacquev6/PyGithub/commit/6cb149dce41cf1f110ae1f1d6a5c6bdd66790b69"}]},{"sha":"2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:04:49Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:04:49Z"},"message":"Say thank you to stargazers","tree":{"sha":"6c1c7aadddfcbc9a65fae7d164a9432ab3ce452a","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/6c1c7aadddfcbc9a65fae7d164a9432ab3ce452a"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","html_url":"https://github.com/jacquev6/PyGithub/commit/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008","html_url":"https://github.com/jacquev6/PyGithub/commit/ba5b0d5ea93d362ecd8b5a91701a9c62c385d008"}]},{"sha":"ab626114db1c798e9269daed295d1e79c36879bb","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:21:07Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:21:07Z"},"message":"Merge branch 'topic/ConditionalRequest' into develop\n\nConflicts:\n\tREADME.rst","tree":{"sha":"c15e38407a8fc7f086a7bf48e02aa5ca7be44e62","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/c15e38407a8fc7f086a7bf48e02aa5ca7be44e62"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/ab626114db1c798e9269daed295d1e79c36879bb","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ab626114db1c798e9269daed295d1e79c36879bb","html_url":"https://github.com/jacquev6/PyGithub/commit/ab626114db1c798e9269daed295d1e79c36879bb","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ab626114db1c798e9269daed295d1e79c36879bb/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5","html_url":"https://github.com/jacquev6/PyGithub/commit/2e3ab5cc9295c4e3c3c6a0d1c179a49df0db96e5"},{"sha":"d18d1b0354a5c7de920b30ef1e5950a5479dd866","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/d18d1b0354a5c7de920b30ef1e5950a5479dd866","html_url":"https://github.com/jacquev6/PyGithub/commit/d18d1b0354a5c7de920b30ef1e5950a5479dd866"}]},{"sha":"1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:23:47Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:23:47Z"},"message":"Don't assume there is a 'message' field in case of error","tree":{"sha":"1eaf1c66ede16d89d6067a0c23f23f93abf83c5e","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/1eaf1c66ede16d89d6067a0c23f23f93abf83c5e"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","html_url":"https://github.com/jacquev6/PyGithub/commit/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"ab626114db1c798e9269daed295d1e79c36879bb","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/ab626114db1c798e9269daed295d1e79c36879bb","html_url":"https://github.com/jacquev6/PyGithub/commit/ab626114db1c798e9269daed295d1e79c36879bb"}]},{"sha":"dc610dfaac50dd5bbbd572986cda35f6729aee5b","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T08:51:50Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T08:51:50Z"},"message":"Small fixes and todos","tree":{"sha":"d54e7b47327b5bb25ba38338bfcc4a0c0a61992e","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/d54e7b47327b5bb25ba38338bfcc4a0c0a61992e"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/dc610dfaac50dd5bbbd572986cda35f6729aee5b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc610dfaac50dd5bbbd572986cda35f6729aee5b","html_url":"https://github.com/jacquev6/PyGithub/commit/dc610dfaac50dd5bbbd572986cda35f6729aee5b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc610dfaac50dd5bbbd572986cda35f6729aee5b/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d","html_url":"https://github.com/jacquev6/PyGithub/commit/1d0ba7ef6461ccdd25af74bfed61d3ceb5bc926d"}]},{"sha":"2081675afbfed404f6a580bce0ec363bebbfd98b","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:00:59Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:00:59Z"},"message":"Fix doc generation","tree":{"sha":"7aafacfc490987a44d3c73a72669e07d900f4ea9","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/7aafacfc490987a44d3c73a72669e07d900f4ea9"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/2081675afbfed404f6a580bce0ec363bebbfd98b","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2081675afbfed404f6a580bce0ec363bebbfd98b","html_url":"https://github.com/jacquev6/PyGithub/commit/2081675afbfed404f6a580bce0ec363bebbfd98b","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2081675afbfed404f6a580bce0ec363bebbfd98b/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"dc610dfaac50dd5bbbd572986cda35f6729aee5b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/dc610dfaac50dd5bbbd572986cda35f6729aee5b","html_url":"https://github.com/jacquev6/PyGithub/commit/dc610dfaac50dd5bbbd572986cda35f6729aee5b"}]},{"sha":"f2feb81dae1b28af80c559db7328f2d6fe017911","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-05T16:56:56Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:01:32Z"},"message":"Add default parameters to greatly reduce code redoundancy","tree":{"sha":"075abd28eec29754d4ac96d94fa00e0ee41e9e09","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/075abd28eec29754d4ac96d94fa00e0ee41e9e09"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/f2feb81dae1b28af80c559db7328f2d6fe017911","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2feb81dae1b28af80c559db7328f2d6fe017911","html_url":"https://github.com/jacquev6/PyGithub/commit/f2feb81dae1b28af80c559db7328f2d6fe017911","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2feb81dae1b28af80c559db7328f2d6fe017911/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2081675afbfed404f6a580bce0ec363bebbfd98b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2081675afbfed404f6a580bce0ec363bebbfd98b","html_url":"https://github.com/jacquev6/PyGithub/commit/2081675afbfed404f6a580bce0ec363bebbfd98b"}]},{"sha":"c819580ce872f251e8ec23deee95d9fb15ca19c9","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T08:51:13Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:01:33Z"},"message":"Get status of Github API (#188)","tree":{"sha":"e726ab47b3248869efd35a5f989b15eece62cbe9","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e726ab47b3248869efd35a5f989b15eece62cbe9"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/c819580ce872f251e8ec23deee95d9fb15ca19c9","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c819580ce872f251e8ec23deee95d9fb15ca19c9","html_url":"https://github.com/jacquev6/PyGithub/commit/c819580ce872f251e8ec23deee95d9fb15ca19c9","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c819580ce872f251e8ec23deee95d9fb15ca19c9/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"f2feb81dae1b28af80c559db7328f2d6fe017911","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/f2feb81dae1b28af80c559db7328f2d6fe017911","html_url":"https://github.com/jacquev6/PyGithub/commit/f2feb81dae1b28af80c559db7328f2d6fe017911"}]},{"sha":"a6597499c2f82e063074a3036d875417d5efa296","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:04:41Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2013-09-06T09:04:41Z"},"message":"Merge branch 'topic/ApiStatus' into develop","tree":{"sha":"e726ab47b3248869efd35a5f989b15eece62cbe9","url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees/e726ab47b3248869efd35a5f989b15eece62cbe9"},"url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits/a6597499c2f82e063074a3036d875417d5efa296","comment_count":0},"url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a6597499c2f82e063074a3036d875417d5efa296","html_url":"https://github.com/jacquev6/PyGithub/commit/a6597499c2f82e063074a3036d875417d5efa296","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/commits/a6597499c2f82e063074a3036d875417d5efa296/comments","author":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"committer":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"parents":[{"sha":"2081675afbfed404f6a580bce0ec363bebbfd98b","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/2081675afbfed404f6a580bce0ec363bebbfd98b","html_url":"https://github.com/jacquev6/PyGithub/commit/2081675afbfed404f6a580bce0ec363bebbfd98b"},{"sha":"c819580ce872f251e8ec23deee95d9fb15ca19c9","url":"https://api.github.com/repos/jacquev6/PyGithub/commits/c819580ce872f251e8ec23deee95d9fb15ca19c9","html_url":"https://github.com/jacquev6/PyGithub/commit/c819580ce872f251e8ec23deee95d9fb15ca19c9"}]}],"files":[{"sha":"fa4ed127848a478d04d033a1e4dd1330c285e120","filename":".gitignore","status":"modified","additions":5,"deletions":0,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/.gitignore","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/.gitignore","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/.gitignore?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -1,6 +1,7 @@\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -28,3 +29,7 @@ GithubCredentials.py\n /PyGithub.egg-info/\n /.coverage\n /developer.github.com/\n+\n+*.cfg\n+*.bat\n+*.py~"},{"sha":"32e67f35289f9572bab58ac717f51e36a303cd9e","filename":"README.rst","status":"modified","additions":14,"deletions":22,"changes":36,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/README.rst","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/README.rst","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/README.rst?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -7,18 +7,25 @@ Should you have any question, any remark, or if you find a bug, or if there is s\n \n PyGithub is stable. I will maintain it up to date with the API, and fix bugs if any, but I don't plan new heavy developments.\n \n+\n What's new?\n ===========\n \n+Thank you, dear stargazers!\n+---------------------------\n+\n+Starting today (September 05th, 2013), we now need more than 8 bits to store the number of `stargazers `_! Thank you so much!\n \n-`Version 1.18.0 `_ (August 21st, 2013) (Bénodet edition)\n--------------------------------------------------------------------------------------------------------------------------------\n+`Version 1.19.0 `_ (September ??th, 2013) (AKFish's edition)\n+-----------------------------------------------------------------------------------------------------------------------------------\n \n-* `Issues `_' ``repository`` attribute will never be ``None``. Thank you `stuglaser `_ for the pull request\n-* No more false assumption on `rate_limiting `_, and creation of ``rate_limiting_resettime``. Thank you `edjackson `_ for the pull request\n-* `New `_ parameters ``since`` and ``until`` to ``Repository.get_commits``. Thank you `apetresc `_ for the pull request\n-* `Catch `_ Json parsing exception for some internal server errors, and throw a better exception. Thank you `MarkRoddy `_ for the pull request\n-* `Allow `_ reversed iteration of ``PaginatedList``s. Thank you `davidbrai `_ for the pull request\n+* Implement `conditional requests `_ by the method ``GithubObject.update``. Thank you very much `akfish `_ for the pull request and your collaboration!\n+* Implement persistence of PyGithub objects: ``Github.save`` and ``Github.load``. Don't forget to ``update`` your objects after loading them, it won't decrease your rate limiting quota if nothing has changed. Again, thank you `akfish `_\n+* Implement ``Github.get_repos`` to get all public repositories\n+* Implement ``NamedUser.has_in_following``\n+* Technical change: HTTP headers are now stored in retrieved objects. This is a base for new functionalities. Thank you `akfish `_ for the pull request\n+* Use the new URL to fork gists (minor change)\n+* Use the new URL to test hooks (minor change)\n \n What's missing?\n ===============\n@@ -30,10 +37,6 @@ Github API v3 URLs not (yet) covered by PyGithub\n \n * ``/applications/:client_id/tokens/:access_token`` (GET)\n * ``/feeds`` (GET)\n-* ``/gists/:id/forks`` (POST)\n-\n- * instead, ``Gist.create_fork`` calls the old URL ``/gists/:id/fork``\n-\n * ``/meta`` (GET)\n * ``/notifications`` (PUT)\n * ``/notifications/emails`` (GET)\n@@ -54,10 +57,6 @@ Github API v3 URLs not (yet) covered by PyGithub\n \n * ``/repos/:owner/:repo/contents/:path`` (DELETE)\n * ``/repos/:owner/:repo/contents/:path`` (PUT)\n-* ``/repos/:owner/:repo/hooks/:id/tests`` (POST)\n-\n- * instead, ``Hook.test`` calls the old URL ``/repos/:owner/:repo/hooks/:id/test``\n-\n * ``/repos/:owner/:repo/notifications`` (GET)\n * ``/repos/:owner/:repo/notifications`` (PUT)\n * ``/repos/:owner/:repo/stats/code_frequency`` (GET)\n@@ -68,17 +67,10 @@ Github API v3 URLs not (yet) covered by PyGithub\n * ``/repos/:owner/:repo/subscription`` (DELETE)\n * ``/repos/:owner/:repo/subscription`` (GET)\n * ``/repos/:owner/:repo/subscription`` (PUT)\n-* ``/repositories`` (GET)\n-\n- * should be called in method ``Github.get_repos``\n-\n * ``/search/code`` (GET)\n * ``/search/issues`` (GET)\n * ``/search/repositories`` (GET)\n * ``/search/users`` (GET)\n-* ``/users/:user/following/:target_user`` (GET)\n-\n- * should be called in method ``NamedUser.has_in_following``\n \n Documentation\n ============="},{"sha":"9f856df33d80af7c4699cabf13444e7c69a121da","filename":"doc/conf.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/doc/conf.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/doc/conf.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/doc/conf.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -281,6 +281,7 @@\n \t\t\"../github/MainClass.py\",\n \t\t\"../github/PaginatedList.py\",\n \t\t\"../github/Requester.py\",\n+\t\t\"../github/Consts.py\",\n \t\t\"../github/__init__.py\"]\n ]\n \n@@ -318,7 +319,7 @@\n \t\t\t\tif not isProperty:\n \t\t\t\t\tassert method is None, method + \" has no :calls: section\"\n \t\t\t\t\tmethod = line.split(\"(\")[0][8:]\n-\t\t\t\t\tif method in [\"_initAttributes\", \"_useAttributes\", \"__init__\", \"__create_pull_1\", \"__create_pull_2\", \"__create_pull\", \"_hub\", \"__get_FIX_REPO_GET_GIT_REF\", \"__set_FIX_REPO_GET_GIT_REF\", \"__get_per_page\", \"__set_per_page\"]:\n+\t\t\t\t\tif method in [\"_initAttributes\", \"_useAttributes\", \"__init__\", \"__create_pull_1\", \"__create_pull_2\", \"__create_pull\", \"_hub\", \"__get_FIX_REPO_GET_GIT_REF\", \"__set_FIX_REPO_GET_GIT_REF\", \"__get_per_page\", \"__set_per_page\", \"create_from_raw_data\", \"dump\", \"load\"]:\n \t\t\t\t\t\tmethod = None\n \t\t\t\tisProperty = False\n \t\t\tif line.startswith(\" :calls: `\"):"},{"sha":"67a289c3acb10bb39a3228b80e912fb097a0db25","filename":"github/AuthenticatedUser.py","status":"modified","additions":36,"deletions":78,"changes":114,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/AuthenticatedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/AuthenticatedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/AuthenticatedUser.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -256,8 +257,7 @@ def add_to_emails(self, *emails):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/user/emails\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n \n def add_to_following(self, following):\n@@ -269,9 +269,7 @@ def add_to_following(self, following):\n assert isinstance(following, github.NamedUser.NamedUser), following\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- \"/user/following/\" + following._identity,\n- None,\n- None\n+ \"/user/following/\" + following._identity\n )\n \n def add_to_starred(self, starred):\n@@ -283,9 +281,7 @@ def add_to_starred(self, starred):\n assert isinstance(starred, github.Repository.Repository), starred\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- \"/user/starred/\" + starred._identity,\n- None,\n- None\n+ \"/user/starred/\" + starred._identity\n )\n \n def add_to_subscriptions(self, subscription):\n@@ -297,9 +293,7 @@ def add_to_subscriptions(self, subscription):\n assert isinstance(subscription, github.Repository.Repository), subscription\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- \"/user/subscriptions/\" + subscription._identity,\n- None,\n- None\n+ \"/user/subscriptions/\" + subscription._identity\n )\n \n def add_to_watched(self, watched):\n@@ -311,9 +305,7 @@ def add_to_watched(self, watched):\n assert isinstance(watched, github.Repository.Repository), watched\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- \"/user/watched/\" + watched._identity,\n- None,\n- None\n+ \"/user/watched/\" + watched._identity\n )\n \n 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):\n@@ -345,10 +337,9 @@ def create_authorization(self, scopes=github.GithubObject.NotSet, note=github.Gi\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/authorizations\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Authorization.Authorization(self._requester, data, completed=True)\n+ return github.Authorization.Authorization(self._requester, headers, data, completed=True)\n \n def create_fork(self, repo):\n \"\"\"\n@@ -359,11 +350,9 @@ def create_fork(self, repo):\n assert isinstance(repo, github.Repository.Repository), repo\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n- \"/repos/\" + repo.owner.login + \"/\" + repo.name + \"/forks\",\n- None,\n- None\n+ \"/repos/\" + repo.owner.login + \"/\" + repo.name + \"/forks\"\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def create_gist(self, public, files, description=github.GithubObject.NotSet):\n \"\"\"\n@@ -385,10 +374,9 @@ def create_gist(self, public, files, description=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/gists\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Gist.Gist(self._requester, data, completed=True)\n+ return github.Gist.Gist(self._requester, headers, data, completed=True)\n \n def create_key(self, title, key):\n \"\"\"\n@@ -406,10 +394,9 @@ def create_key(self, title, key):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/user/keys\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.UserKey.UserKey(self._requester, data, completed=True)\n+ return github.UserKey.UserKey(self._requester, headers, data, completed=True)\n \n def create_repo(self, name, description=github.GithubObject.NotSet, homepage=github.GithubObject.NotSet, private=github.GithubObject.NotSet, has_issues=github.GithubObject.NotSet, has_wiki=github.GithubObject.NotSet, has_downloads=github.GithubObject.NotSet, auto_init=github.GithubObject.NotSet, gitignore_template=github.GithubObject.NotSet):\n \"\"\"\n@@ -456,10 +443,9 @@ def create_repo(self, name, description=github.GithubObject.NotSet, homepage=git\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/user/repos\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def edit(self, name=github.GithubObject.NotSet, email=github.GithubObject.NotSet, blog=github.GithubObject.NotSet, company=github.GithubObject.NotSet, location=github.GithubObject.NotSet, hireable=github.GithubObject.NotSet, bio=github.GithubObject.NotSet):\n \"\"\"\n@@ -498,8 +484,7 @@ def edit(self, name=github.GithubObject.NotSet, email=github.GithubObject.NotSet\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n \"/user\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -512,11 +497,9 @@ def get_authorization(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/authorizations/\" + str(id),\n- None,\n- None\n+ \"/authorizations/\" + str(id)\n )\n- return github.Authorization.Authorization(self._requester, data, completed=True)\n+ return github.Authorization.Authorization(self._requester, headers, data, completed=True)\n \n def get_authorizations(self):\n \"\"\"\n@@ -537,9 +520,7 @@ def get_emails(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/user/emails\",\n- None,\n- None\n+ \"/user/emails\"\n )\n return data\n \n@@ -676,11 +657,9 @@ def get_key(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/user/keys/\" + str(id),\n- None,\n- None\n+ \"/user/keys/\" + str(id)\n )\n- return github.UserKey.UserKey(self._requester, data, completed=True)\n+ return github.UserKey.UserKey(self._requester, headers, data, completed=True)\n \n def get_keys(self):\n \"\"\"\n@@ -703,11 +682,9 @@ def get_notification(self, id):\n assert isinstance(id, str), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/notifications/threads/\" + id,\n- None,\n- None\n+ \"/notifications/threads/\" + id\n )\n- return github.Notification.Notification(self._requester, data, completed=True)\n+ return github.Notification.Notification(self._requester, headers, data, completed=True)\n \n def get_notifications(self, all=github.GithubObject.NotSet, participating=github.GithubObject.NotSet):\n \"\"\"\n@@ -767,11 +744,9 @@ def get_repo(self, name):\n assert isinstance(name, str), name\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/repos/\" + self.login + \"/\" + name,\n- None,\n- None\n+ \"/repos/\" + self.login + \"/\" + name\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def get_repos(self, type=github.GithubObject.NotSet, sort=github.GithubObject.NotSet, direction=github.GithubObject.NotSet):\n \"\"\"\n@@ -855,9 +830,7 @@ def has_in_following(self, following):\n assert isinstance(following, github.NamedUser.NamedUser), following\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- \"/user/following/\" + following._identity,\n- None,\n- None\n+ \"/user/following/\" + following._identity\n )\n return status == 204\n \n@@ -870,9 +843,7 @@ def has_in_starred(self, starred):\n assert isinstance(starred, github.Repository.Repository), starred\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- \"/user/starred/\" + starred._identity,\n- None,\n- None\n+ \"/user/starred/\" + starred._identity\n )\n return status == 204\n \n@@ -885,9 +856,7 @@ def has_in_subscriptions(self, subscription):\n assert isinstance(subscription, github.Repository.Repository), subscription\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- \"/user/subscriptions/\" + subscription._identity,\n- None,\n- None\n+ \"/user/subscriptions/\" + subscription._identity\n )\n return status == 204\n \n@@ -900,9 +869,7 @@ def has_in_watched(self, watched):\n assert isinstance(watched, github.Repository.Repository), watched\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- \"/user/watched/\" + watched._identity,\n- None,\n- None\n+ \"/user/watched/\" + watched._identity\n )\n return status == 204\n \n@@ -917,8 +884,7 @@ def remove_from_emails(self, *emails):\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n \"/user/emails\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n \n def remove_from_following(self, following):\n@@ -930,9 +896,7 @@ def remove_from_following(self, following):\n assert isinstance(following, github.NamedUser.NamedUser), following\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- \"/user/following/\" + following._identity,\n- None,\n- None\n+ \"/user/following/\" + following._identity\n )\n \n def remove_from_starred(self, starred):\n@@ -944,9 +908,7 @@ def remove_from_starred(self, starred):\n assert isinstance(starred, github.Repository.Repository), starred\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- \"/user/starred/\" + starred._identity,\n- None,\n- None\n+ \"/user/starred/\" + starred._identity\n )\n \n def remove_from_subscriptions(self, subscription):\n@@ -958,9 +920,7 @@ def remove_from_subscriptions(self, subscription):\n assert isinstance(subscription, github.Repository.Repository), subscription\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- \"/user/subscriptions/\" + subscription._identity,\n- None,\n- None\n+ \"/user/subscriptions/\" + subscription._identity\n )\n \n def remove_from_watched(self, watched):\n@@ -972,9 +932,7 @@ def remove_from_watched(self, watched):\n assert isinstance(watched, github.Repository.Repository), watched\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- \"/user/watched/\" + watched._identity,\n- None,\n- None\n+ \"/user/watched/\" + watched._identity\n )\n \n def _initAttributes(self):\n@@ -1061,7 +1019,7 @@ def _useAttributes(self, attributes):\n self._owned_private_repos = attributes[\"owned_private_repos\"]\n if \"plan\" in attributes: # pragma no branch\n assert attributes[\"plan\"] is None or isinstance(attributes[\"plan\"], dict), attributes[\"plan\"]\n- self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, attributes[\"plan\"], completed=False)\n+ self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, self._headers, attributes[\"plan\"], completed=False)\n if \"private_gists\" in attributes: # pragma no branch\n assert attributes[\"private_gists\"] is None or isinstance(attributes[\"private_gists\"], (int, long)), attributes[\"private_gists\"]\n self._private_gists = attributes[\"private_gists\"]"},{"sha":"a004fedf687cdbcd52f4ffd494b9e4536bbb037b","filename":"github/Authorization.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Authorization.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Authorization.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Authorization.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -112,9 +113,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n 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):\n@@ -146,8 +145,7 @@ def edit(self, scopes=github.GithubObject.NotSet, add_scopes=github.GithubObject\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -165,7 +163,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"app\" in attributes: # pragma no branch\n assert attributes[\"app\"] is None or isinstance(attributes[\"app\"], dict), attributes[\"app\"]\n- self._app = None if attributes[\"app\"] is None else github.AuthorizationApplication.AuthorizationApplication(self._requester, attributes[\"app\"], completed=False)\n+ self._app = None if attributes[\"app\"] is None else github.AuthorizationApplication.AuthorizationApplication(self._requester, self._headers, attributes[\"app\"], completed=False)\n if \"created_at\" in attributes: # pragma no branch\n assert attributes[\"created_at\"] is None or isinstance(attributes[\"created_at\"], str), attributes[\"created_at\"]\n self._created_at = self._parseDatetime(attributes[\"created_at\"])"},{"sha":"8f38bc1418f4b14e16da2ea24cd8a0fd525b872a","filename":"github/AuthorizationApplication.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/AuthorizationApplication.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/AuthorizationApplication.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/AuthorizationApplication.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"9e76182677f02c87b49e51a0139112421d53bf59","filename":"github/Branch.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Branch.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Branch.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Branch.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -55,7 +56,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"commit\" in attributes: # pragma no branch\n assert attributes[\"commit\"] is None or isinstance(attributes[\"commit\"], dict), attributes[\"commit\"]\n- self._commit = None if attributes[\"commit\"] is None else github.Commit.Commit(self._requester, attributes[\"commit\"], completed=False)\n+ self._commit = None if attributes[\"commit\"] is None else github.Commit.Commit(self._requester, self._headers, attributes[\"commit\"], completed=False)\n if \"name\" in attributes: # pragma no branch\n assert attributes[\"name\"] is None or isinstance(attributes[\"name\"], str), attributes[\"name\"]\n self._name = attributes[\"name\"]"},{"sha":"828da3fe18f120b030701d48a9a78be17ef143e8","filename":"github/Commit.py","status":"modified","additions":11,"deletions":12,"changes":23,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Commit.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Commit.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Commit.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -129,10 +130,9 @@ def create_comment(self, body, line=github.GithubObject.NotSet, path=github.Gith\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.CommitComment.CommitComment(self._requester, data, completed=True)\n+ return github.CommitComment.CommitComment(self._requester, headers, data, completed=True)\n \n def create_status(self, state, target_url=github.GithubObject.NotSet, description=github.GithubObject.NotSet):\n \"\"\"\n@@ -155,10 +155,9 @@ def create_status(self, state, target_url=github.GithubObject.NotSet, descriptio\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self._parentUrl(self._parentUrl(self.url)) + \"/statuses/\" + self.sha,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.CommitStatus.CommitStatus(self._requester, data, completed=True)\n+ return github.CommitStatus.CommitStatus(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -201,23 +200,23 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"author\" in attributes: # pragma no branch\n assert attributes[\"author\"] is None or isinstance(attributes[\"author\"], dict), attributes[\"author\"]\n- self._author = None if attributes[\"author\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"author\"], completed=False)\n+ self._author = None if attributes[\"author\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"author\"], completed=False)\n if \"commit\" in attributes: # pragma no branch\n assert attributes[\"commit\"] is None or isinstance(attributes[\"commit\"], dict), attributes[\"commit\"]\n- self._commit = None if attributes[\"commit\"] is None else github.GitCommit.GitCommit(self._requester, attributes[\"commit\"], completed=False)\n+ self._commit = None if attributes[\"commit\"] is None else github.GitCommit.GitCommit(self._requester, self._headers, attributes[\"commit\"], completed=False)\n if \"committer\" in attributes: # pragma no branch\n assert attributes[\"committer\"] is None or isinstance(attributes[\"committer\"], dict), attributes[\"committer\"]\n- self._committer = None if attributes[\"committer\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"committer\"], completed=False)\n+ self._committer = None if attributes[\"committer\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"committer\"], completed=False)\n if \"files\" in attributes: # pragma no branch\n assert attributes[\"files\"] is None or all(isinstance(element, dict) for element in attributes[\"files\"]), attributes[\"files\"]\n self._files = None if attributes[\"files\"] is None else [\n- github.File.File(self._requester, element, completed=False)\n+ github.File.File(self._requester, self._headers, element, completed=False)\n for element in attributes[\"files\"]\n ]\n if \"parents\" in attributes: # pragma no branch\n assert attributes[\"parents\"] is None or all(isinstance(element, dict) for element in attributes[\"parents\"]), attributes[\"parents\"]\n self._parents = None if attributes[\"parents\"] is None else [\n- Commit(self._requester, element, completed=False)\n+ Commit(self._requester, self._headers, element, completed=False)\n for element in attributes[\"parents\"]\n ]\n if \"sha\" in attributes: # pragma no branch\n@@ -225,7 +224,7 @@ def _useAttributes(self, attributes):\n self._sha = attributes[\"sha\"]\n if \"stats\" in attributes: # pragma no branch\n assert attributes[\"stats\"] is None or isinstance(attributes[\"stats\"], dict), attributes[\"stats\"]\n- self._stats = None if attributes[\"stats\"] is None else github.CommitStats.CommitStats(self._requester, attributes[\"stats\"], completed=False)\n+ self._stats = None if attributes[\"stats\"] is None else github.CommitStats.CommitStats(self._requester, self._headers, attributes[\"stats\"], completed=False)\n if \"url\" in attributes: # pragma no branch\n assert attributes[\"url\"] is None or isinstance(attributes[\"url\"], str), attributes[\"url\"]\n self._url = attributes[\"url\"]"},{"sha":"c2c897d13f4092571b2a71f83694e34ff26c560d","filename":"github/CommitComment.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/CommitComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/CommitComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/CommitComment.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -128,9 +129,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, body):\n@@ -146,8 +145,7 @@ def edit(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -197,4 +195,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"49f407783d025f012358c435ec1153d293856bef","filename":"github/CommitStats.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/CommitStats.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/CommitStats.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/CommitStats.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"d08e0274279824208d98b1dd4033f18b970f594a","filename":"github/CommitStatus.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/CommitStatus.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/CommitStatus.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/CommitStatus.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -97,7 +98,7 @@ def _useAttributes(self, attributes):\n self._created_at = self._parseDatetime(attributes[\"created_at\"])\n if \"creator\" in attributes: # pragma no branch\n assert attributes[\"creator\"] is None or isinstance(attributes[\"creator\"], dict), attributes[\"creator\"]\n- self._creator = None if attributes[\"creator\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"creator\"], completed=False)\n+ self._creator = None if attributes[\"creator\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"creator\"], completed=False)\n if \"description\" in attributes: # pragma no branch\n assert attributes[\"description\"] is None or isinstance(attributes[\"description\"], str), attributes[\"description\"]\n self._description = attributes[\"description\"]"},{"sha":"f5f66bc1f4bcb57c9286fb674e4bfdbaaf47538f","filename":"github/Comparison.py","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Comparison.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Comparison.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Comparison.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -150,14 +151,14 @@ def _useAttributes(self, attributes):\n self._ahead_by = attributes[\"ahead_by\"]\n if \"base_commit\" in attributes: # pragma no branch\n assert attributes[\"base_commit\"] is None or isinstance(attributes[\"base_commit\"], dict), attributes[\"base_commit\"]\n- self._base_commit = None if attributes[\"base_commit\"] is None else github.Commit.Commit(self._requester, attributes[\"base_commit\"], completed=False)\n+ self._base_commit = None if attributes[\"base_commit\"] is None else github.Commit.Commit(self._requester, self._headers, attributes[\"base_commit\"], completed=False)\n if \"behind_by\" in attributes: # pragma no branch\n assert attributes[\"behind_by\"] is None or isinstance(attributes[\"behind_by\"], (int, long)), attributes[\"behind_by\"]\n self._behind_by = attributes[\"behind_by\"]\n if \"commits\" in attributes: # pragma no branch\n assert attributes[\"commits\"] is None or all(isinstance(element, dict) for element in attributes[\"commits\"]), attributes[\"commits\"]\n self._commits = None if attributes[\"commits\"] is None else [\n- github.Commit.Commit(self._requester, element, completed=False)\n+ github.Commit.Commit(self._requester, self._headers, element, completed=False)\n for element in attributes[\"commits\"]\n ]\n if \"diff_url\" in attributes: # pragma no branch\n@@ -166,7 +167,7 @@ def _useAttributes(self, attributes):\n if \"files\" in attributes: # pragma no branch\n assert attributes[\"files\"] is None or all(isinstance(element, dict) for element in attributes[\"files\"]), attributes[\"files\"]\n self._files = None if attributes[\"files\"] is None else [\n- github.File.File(self._requester, element, completed=False)\n+ github.File.File(self._requester, self._headers, element, completed=False)\n for element in attributes[\"files\"]\n ]\n if \"html_url\" in attributes: # pragma no branch"},{"sha":"b3b4791408f3b48375ba7360ef7aa129c592bd24","filename":"github/Consts.py","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Consts.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Consts.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Consts.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,43 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 AKFish #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+# #193: Line endings should be linux style\n+\n+# TODO: As of Thu Aug 21 22:40:13 (BJT) Chinese Standard Time 2013\n+# lots of consts in this project are explict\n+# should realy round them up and reference them by consts\n+# EDIT: well, maybe :-)\n+\n+################################################################################\n+# Request Header #\n+# (Case sensitive) #\n+################################################################################\n+REQ_IF_NONE_MATCH = \"If-None-Match\"\n+REQ_IF_MODIFIED_SINCE = \"If-Modified-Since\"\n+\n+################################################################################\n+# Response Header #\n+# (Lower Case) #\n+################################################################################\n+RES_ETAG = \"etag\"\n+RES_LAST_MODIFED = \"last-modified\""},{"sha":"03818842545b0c6824e8ab4f1e5b1c87462cba6a","filename":"github/ContentFile.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/ContentFile.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/ContentFile.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/ContentFile.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"2cd057cac916898be1451aac7b4f94830a880937","filename":"github/Download.py","status":"modified","additions":2,"deletions":3,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Download.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Download.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Download.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -198,9 +199,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def _initAttributes(self):"},{"sha":"203510252bb0e76c540d3bc20630e75ef99ecb31","filename":"github/Event.py","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Event.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Event.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Event.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -105,7 +106,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"actor\" in attributes: # pragma no branch\n assert attributes[\"actor\"] is None or isinstance(attributes[\"actor\"], dict), attributes[\"actor\"]\n- self._actor = None if attributes[\"actor\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"actor\"], completed=False)\n+ self._actor = None if attributes[\"actor\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"actor\"], completed=False)\n if \"created_at\" in attributes: # pragma no branch\n assert attributes[\"created_at\"] is None or isinstance(attributes[\"created_at\"], str), attributes[\"created_at\"]\n self._created_at = self._parseDatetime(attributes[\"created_at\"])\n@@ -114,7 +115,7 @@ def _useAttributes(self, attributes):\n self._id = attributes[\"id\"]\n if \"org\" in attributes: # pragma no branch\n assert attributes[\"org\"] is None or isinstance(attributes[\"org\"], dict), attributes[\"org\"]\n- self._org = None if attributes[\"org\"] is None else github.Organization.Organization(self._requester, attributes[\"org\"], completed=False)\n+ self._org = None if attributes[\"org\"] is None else github.Organization.Organization(self._requester, self._headers, attributes[\"org\"], completed=False)\n if \"payload\" in attributes: # pragma no branch\n assert attributes[\"payload\"] is None or isinstance(attributes[\"payload\"], dict), attributes[\"payload\"]\n self._payload = attributes[\"payload\"]\n@@ -123,7 +124,7 @@ def _useAttributes(self, attributes):\n self._public = attributes[\"public\"]\n if \"repo\" in attributes: # pragma no branch\n assert attributes[\"repo\"] is None or isinstance(attributes[\"repo\"], dict), attributes[\"repo\"]\n- self._repo = None if attributes[\"repo\"] is None else github.Repository.Repository(self._requester, attributes[\"repo\"], completed=False)\n+ self._repo = None if attributes[\"repo\"] is None else github.Repository.Repository(self._requester, self._headers, attributes[\"repo\"], completed=False)\n if \"type\" in attributes: # pragma no branch\n assert attributes[\"type\"] is None or isinstance(attributes[\"type\"], str), attributes[\"type\"]\n self._type = attributes[\"type\"]"},{"sha":"6adaae8a974440b489b2913d515a32488f8c252f","filename":"github/File.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/File.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/File.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/File.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"65de668ed8da2c379cc88c0515024aa3d4c7164e","filename":"github/Gist.py","status":"modified","additions":17,"deletions":30,"changes":47,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Gist.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Gist.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Gist.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -171,23 +172,20 @@ def create_comment(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GistComment.GistComment(self._requester, data, completed=True)\n+ return github.GistComment.GistComment(self._requester, headers, data, completed=True)\n \n def create_fork(self):\n \"\"\"\n- :calls: `POST /gists/:id/fork `_\n+ :calls: `POST /gists/:id/forks `_\n :rtype: :class:`github.Gist.Gist`\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n- self.url + \"/fork\",\n- None,\n- None\n+ self.url + \"/forks\"\n )\n- return Gist(self._requester, data, completed=True)\n+ return Gist(self._requester, headers, data, completed=True)\n \n def delete(self):\n \"\"\"\n@@ -196,9 +194,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, description=github.GithubObject.NotSet, files=github.GithubObject.NotSet):\n@@ -218,8 +214,7 @@ def edit(self, description=github.GithubObject.NotSet, files=github.GithubObject\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -232,11 +227,9 @@ def get_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/comments/\" + str(id),\n- None,\n- None\n+ self.url + \"/comments/\" + str(id)\n )\n- return github.GistComment.GistComment(self._requester, data, completed=True)\n+ return github.GistComment.GistComment(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -257,9 +250,7 @@ def is_starred(self):\n \"\"\"\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/star\",\n- None,\n- None\n+ self.url + \"/star\"\n )\n return status == 204\n \n@@ -270,9 +261,7 @@ def reset_starred(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/star\",\n- None,\n- None\n+ self.url + \"/star\"\n )\n \n def set_starred(self):\n@@ -282,9 +271,7 @@ def set_starred(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/star\",\n- None,\n- None\n+ self.url + \"/star\"\n )\n \n def _initAttributes(self):\n@@ -317,12 +304,12 @@ def _useAttributes(self, attributes):\n if \"files\" in attributes: # pragma no branch\n assert attributes[\"files\"] is None or all(isinstance(element, dict) for element in attributes[\"files\"].itervalues()), attributes[\"files\"]\n self._files = None if attributes[\"files\"] is None else dict(\n- (key, github.GistFile.GistFile(self._requester, element, completed=False))\n+ (key, github.GistFile.GistFile(self._requester, self._headers, element, completed=False))\n for key, element in attributes[\"files\"].iteritems()\n )\n if \"fork_of\" in attributes: # pragma no branch\n assert attributes[\"fork_of\"] is None or isinstance(attributes[\"fork_of\"], dict), attributes[\"fork_of\"]\n- self._fork_of = None if attributes[\"fork_of\"] is None else Gist(self._requester, attributes[\"fork_of\"], completed=False)\n+ self._fork_of = None if attributes[\"fork_of\"] is None else Gist(self._requester, self._headers, attributes[\"fork_of\"], completed=False)\n if \"forks\" in attributes: # pragma no branch\n assert attributes[\"forks\"] is None or all(isinstance(element, dict) for element in attributes[\"forks\"]), attributes[\"forks\"]\n self._forks = None if attributes[\"forks\"] is None else [\n@@ -338,7 +325,7 @@ def _useAttributes(self, attributes):\n if \"history\" in attributes: # pragma no branch\n assert attributes[\"history\"] is None or all(isinstance(element, dict) for element in attributes[\"history\"]), attributes[\"history\"]\n self._history = None if attributes[\"history\"] is None else [\n- github.GistHistoryState.GistHistoryState(self._requester, element, completed=False)\n+ github.GistHistoryState.GistHistoryState(self._requester, self._headers, element, completed=False)\n for element in attributes[\"history\"]\n ]\n if \"html_url\" in attributes: # pragma no branch\n@@ -358,4 +345,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"5ee0664c5827eccb2cce3e514d907f70daa7e09c","filename":"github/GistComment.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GistComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GistComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GistComment.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -88,9 +89,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, body):\n@@ -106,8 +105,7 @@ def edit(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -137,4 +135,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"96c8ee2741d3fe8fbb40d12541f9e4a94839fdf3","filename":"github/GistFile.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GistFile.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GistFile.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GistFile.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"bc24d5c0700d0bf95d76e8cc1b20cdbbdfeb80a7","filename":"github/GistHistoryState.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GistHistoryState.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GistHistoryState.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GistHistoryState.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -84,7 +85,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"change_status\" in attributes: # pragma no branch\n assert attributes[\"change_status\"] is None or isinstance(attributes[\"change_status\"], dict), attributes[\"change_status\"]\n- self._change_status = None if attributes[\"change_status\"] is None else github.CommitStats.CommitStats(self._requester, attributes[\"change_status\"], completed=False)\n+ self._change_status = None if attributes[\"change_status\"] is None else github.CommitStats.CommitStats(self._requester, self._headers, attributes[\"change_status\"], completed=False)\n if \"committed_at\" in attributes: # pragma no branch\n assert attributes[\"committed_at\"] is None or isinstance(attributes[\"committed_at\"], str), attributes[\"committed_at\"]\n self._committed_at = self._parseDatetime(attributes[\"committed_at\"])\n@@ -93,7 +94,7 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)\n if \"version\" in attributes: # pragma no branch\n assert attributes[\"version\"] is None or isinstance(attributes[\"version\"], str), attributes[\"version\"]\n self._version = attributes[\"version\"]"},{"sha":"e56ce94d55e53cc74e259293b1a2c91d22f8b40c","filename":"github/GitAuthor.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitAuthor.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitAuthor.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitAuthor.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"8f1056829fa56386223cb843005d6777ac71d32e","filename":"github/GitBlob.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitBlob.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitBlob.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitBlob.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"ffdc6d5a739ed5dd4f701cd2c345108ceb5499c2","filename":"github/GitCommit.py","status":"modified","additions":5,"deletions":4,"changes":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitCommit.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitCommit.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitCommit.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -106,17 +107,17 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"author\" in attributes: # pragma no branch\n assert attributes[\"author\"] is None or isinstance(attributes[\"author\"], dict), attributes[\"author\"]\n- self._author = None if attributes[\"author\"] is None else github.GitAuthor.GitAuthor(self._requester, attributes[\"author\"], completed=False)\n+ self._author = None if attributes[\"author\"] is None else github.GitAuthor.GitAuthor(self._requester, self._headers, attributes[\"author\"], completed=False)\n if \"committer\" in attributes: # pragma no branch\n assert attributes[\"committer\"] is None or isinstance(attributes[\"committer\"], dict), attributes[\"committer\"]\n- self._committer = None if attributes[\"committer\"] is None else github.GitAuthor.GitAuthor(self._requester, attributes[\"committer\"], completed=False)\n+ self._committer = None if attributes[\"committer\"] is None else github.GitAuthor.GitAuthor(self._requester, self._headers, attributes[\"committer\"], completed=False)\n if \"message\" in attributes: # pragma no branch\n assert attributes[\"message\"] is None or isinstance(attributes[\"message\"], str), attributes[\"message\"]\n self._message = attributes[\"message\"]\n if \"parents\" in attributes: # pragma no branch\n assert attributes[\"parents\"] is None or all(isinstance(element, dict) for element in attributes[\"parents\"]), attributes[\"parents\"]\n self._parents = None if attributes[\"parents\"] is None else [\n- GitCommit(self._requester, element, completed=False)\n+ GitCommit(self._requester, self._headers, element, completed=False)\n for element in attributes[\"parents\"]\n ]\n if \"sha\" in attributes: # pragma no branch\n@@ -124,7 +125,7 @@ def _useAttributes(self, attributes):\n self._sha = attributes[\"sha\"]\n if \"tree\" in attributes: # pragma no branch\n assert attributes[\"tree\"] is None or isinstance(attributes[\"tree\"], dict), attributes[\"tree\"]\n- self._tree = None if attributes[\"tree\"] is None else github.GitTree.GitTree(self._requester, attributes[\"tree\"], completed=False)\n+ self._tree = None if attributes[\"tree\"] is None else github.GitTree.GitTree(self._requester, self._headers, attributes[\"tree\"], completed=False)\n if \"url\" in attributes: # pragma no branch\n assert attributes[\"url\"] is None or isinstance(attributes[\"url\"], str), attributes[\"url\"]\n self._url = attributes[\"url\"]"},{"sha":"a731464122384af8435525853343bce170cb5cd6","filename":"github/GitObject.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitObject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitObject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitObject.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"97a2ca4d6e900f32d7910ef657afc40d4b91a539","filename":"github/GitRef.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitRef.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitRef.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitRef.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -64,9 +65,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, sha, force=github.GithubObject.NotSet):\n@@ -86,8 +85,7 @@ def edit(self, sha, force=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -99,7 +97,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"object\" in attributes: # pragma no branch\n assert attributes[\"object\"] is None or isinstance(attributes[\"object\"], dict), attributes[\"object\"]\n- self._object = None if attributes[\"object\"] is None else github.GitObject.GitObject(self._requester, attributes[\"object\"], completed=False)\n+ self._object = None if attributes[\"object\"] is None else github.GitObject.GitObject(self._requester, self._headers, attributes[\"object\"], completed=False)\n if \"ref\" in attributes: # pragma no branch\n assert attributes[\"ref\"] is None or isinstance(attributes[\"ref\"], str), attributes[\"ref\"]\n self._ref = attributes[\"ref\"]"},{"sha":"564b6b86fa11f943796a0630afd00e17f7fee1ce","filename":"github/GitTag.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitTag.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitTag.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitTag.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -96,7 +97,7 @@ def _useAttributes(self, attributes):\n self._message = attributes[\"message\"]\n if \"object\" in attributes: # pragma no branch\n assert attributes[\"object\"] is None or isinstance(attributes[\"object\"], dict), attributes[\"object\"]\n- self._object = None if attributes[\"object\"] is None else github.GitObject.GitObject(self._requester, attributes[\"object\"], completed=False)\n+ self._object = None if attributes[\"object\"] is None else github.GitObject.GitObject(self._requester, self._headers, attributes[\"object\"], completed=False)\n if \"sha\" in attributes: # pragma no branch\n assert attributes[\"sha\"] is None or isinstance(attributes[\"sha\"], str), attributes[\"sha\"]\n self._sha = attributes[\"sha\"]\n@@ -105,7 +106,7 @@ def _useAttributes(self, attributes):\n self._tag = attributes[\"tag\"]\n if \"tagger\" in attributes: # pragma no branch\n assert attributes[\"tagger\"] is None or isinstance(attributes[\"tagger\"], dict), attributes[\"tagger\"]\n- self._tagger = None if attributes[\"tagger\"] is None else github.GitAuthor.GitAuthor(self._requester, attributes[\"tagger\"], completed=False)\n+ self._tagger = None if attributes[\"tagger\"] is None else github.GitAuthor.GitAuthor(self._requester, self._headers, attributes[\"tagger\"], completed=False)\n if \"url\" in attributes: # pragma no branch\n assert attributes[\"url\"] is None or isinstance(attributes[\"url\"], str), attributes[\"url\"]\n self._url = attributes[\"url\"]"},{"sha":"b06c5e82369ae5ba3a50d0edc483e3b22c207aad","filename":"github/GitTree.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitTree.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitTree.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitTree.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -73,7 +74,7 @@ def _useAttributes(self, attributes):\n if \"tree\" in attributes: # pragma no branch\n assert attributes[\"tree\"] is None or all(isinstance(element, dict) for element in attributes[\"tree\"]), attributes[\"tree\"]\n self._tree = None if attributes[\"tree\"] is None else [\n- github.GitTreeElement.GitTreeElement(self._requester, element, completed=False)\n+ github.GitTreeElement.GitTreeElement(self._requester, self._headers, element, completed=False)\n for element in attributes[\"tree\"]\n ]\n if \"url\" in attributes: # pragma no branch"},{"sha":"e7ae76bbcb10fa76c9b0b3316550045a03f5f81b","filename":"github/GitTreeElement.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitTreeElement.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitTreeElement.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitTreeElement.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"02e7a75e28a911a1bf691663d2e2b3a6bde84768","filename":"github/GithubException.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GithubException.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GithubException.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GithubException.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"91c079b70a8508a3ab3f7f740f51bdda35cf87ea","filename":"github/GithubObject.py","status":"modified","additions":74,"deletions":10,"changes":84,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GithubObject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GithubObject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GithubObject.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -26,6 +27,7 @@\n import datetime\n \n import GithubException\n+import Consts\n \n \n class _NotSetType:\n@@ -38,14 +40,32 @@ class GithubObject(object):\n \"\"\"\n Base class for all classes representing objects returned by the API.\n \"\"\"\n- def __init__(self, requester, attributes, completed):\n+\n+ '''\n+ A global debug flag to enable header validation by requester for all objects\n+ '''\n+ CHECK_AFTER_INIT_FLAG = False\n+\n+ @classmethod\n+ def setCheckAfterInitFlag(cls, flag):\n+ cls.CHECK_AFTER_INIT_FLAG = flag\n+\n+ def __init__(self, requester, headers, attributes, completed):\n self._requester = requester\n self._initAttributes()\n- self._storeAndUseAttributes(attributes)\n+ self._storeAndUseAttributes(headers, attributes)\n \n- def _storeAndUseAttributes(self, attributes):\n- self._useAttributes(attributes)\n+ # Ask requester to do some checking, for debug and test purpose\n+ # Since it's most handy to access and kinda all-knowing\n+ if self.CHECK_AFTER_INIT_FLAG: # pragma no branch (Flag always set in tests)\n+ requester.check_me(self)\n+\n+ def _storeAndUseAttributes(self, headers, attributes):\n+ # Make sure headers are assigned before calling _useAttributes\n+ # (Some derived classes will use headers in _useAttributes)\n+ self._headers = headers\n self._rawData = attributes\n+ self._useAttributes(attributes)\n \n @property\n def raw_data(self):\n@@ -55,6 +75,14 @@ def raw_data(self):\n self._completeIfNeeded()\n return self._rawData\n \n+ @property\n+ def raw_headers(self):\n+ \"\"\"\n+ :type: dict\n+ \"\"\"\n+ self._completeIfNeeded()\n+ return self._headers\n+\n @staticmethod\n def _parentUrl(url):\n return \"/\".join(url.split(\"/\")[: -1])\n@@ -77,6 +105,20 @@ def _parseDatetime(s):\n else:\n return datetime.datetime.strptime(s, \"%Y-%m-%dT%H:%M:%SZ\")\n \n+ @property\n+ def etag(self):\n+ '''\n+ :type str\n+ '''\n+ return self._headers.get(Consts.RES_ETAG)\n+\n+ @property\n+ def last_modified(self):\n+ '''\n+ :type str\n+ '''\n+ return self._headers.get(Consts.RES_LAST_MODIFED)\n+\n \n class NonCompletableGithubObject(GithubObject):\n def _completeIfNeeded(self):\n@@ -84,8 +126,8 @@ def _completeIfNeeded(self):\n \n \n class CompletableGithubObject(GithubObject):\n- def __init__(self, requester, attributes, completed):\n- GithubObject.__init__(self, requester, attributes, completed)\n+ def __init__(self, requester, headers, attributes, completed):\n+ GithubObject.__init__(self, requester, headers, attributes, completed)\n self.__completed = completed\n \n def _completeIfNotSet(self, value):\n@@ -99,9 +141,31 @@ def _completeIfNeeded(self):\n def __complete(self):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self._url,\n- None,\n- None\n+ self._url\n )\n- self._storeAndUseAttributes(data)\n+ self._storeAndUseAttributes(headers, data)\n self.__completed = True\n+\n+ def update(self):\n+ '''\n+ Check and update the object with conditional request\n+ :rtype: Boolean value indicating whether the object is changed\n+ '''\n+ conditionalRequestHeader = dict()\n+ if self.etag is not None:\n+ conditionalRequestHeader[Consts.REQ_IF_NONE_MATCH] = self.etag\n+ if self.last_modified is not None:\n+ conditionalRequestHeader[Consts.REQ_IF_MODIFIED_SINCE] = self.last_modified\n+\n+ status, responseHeaders, output = self._requester.requestJson(\n+ \"GET\",\n+ self._url,\n+ headers=conditionalRequestHeader\n+ )\n+ if status == 304:\n+ return False\n+ else:\n+ headers, data = self._requester._Requester__check(status, responseHeaders, output)\n+ self._storeAndUseAttributes(headers, data)\n+ self.__completed = True\n+ return True"},{"sha":"a8a7022f4602f37b2583f890e324b204cdc89a62","filename":"github/GitignoreTemplate.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/GitignoreTemplate.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/GitignoreTemplate.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/GitignoreTemplate.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -3,6 +3,7 @@\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"447a0e9a7afa1e845dea9dc82f8c114251ea61bc","filename":"github/Hook.py","status":"modified","additions":7,"deletions":11,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Hook.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Hook.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Hook.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -30,7 +31,7 @@\n \n class Hook(github.GithubObject.CompletableGithubObject):\n \"\"\"\n- This class represents Hooks as returned for example by http://developer.github.com/v3/todo\n+ This class represents Hooks as returned for example by http://developer.github.com/v3/repos/hooks\n \"\"\"\n \n @property\n@@ -112,9 +113,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, name, config, events=github.GithubObject.NotSet, add_events=github.GithubObject.NotSet, remove_events=github.GithubObject.NotSet, active=github.GithubObject.NotSet):\n@@ -149,21 +148,18 @@ def edit(self, name, config, events=github.GithubObject.NotSet, add_events=githu\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n def test(self):\n \"\"\"\n- :calls: `POST /repos/:owner/:repo/hooks/:id/test `_\n+ :calls: `POST /repos/:owner/:repo/hooks/:id/tests `_\n :rtype: None\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n- self.url + \"/test\",\n- None,\n- None\n+ self.url + \"/tests\"\n )\n \n def _initAttributes(self):\n@@ -195,7 +191,7 @@ def _useAttributes(self, attributes):\n self._id = attributes[\"id\"]\n if \"last_response\" in attributes: # pragma no branch\n assert attributes[\"last_response\"] is None or isinstance(attributes[\"last_response\"], dict), attributes[\"last_response\"]\n- self._last_response = None if attributes[\"last_response\"] is None else github.HookResponse.HookResponse(self._requester, attributes[\"last_response\"], completed=False)\n+ self._last_response = None if attributes[\"last_response\"] is None else github.HookResponse.HookResponse(self._requester, self._headers, attributes[\"last_response\"], completed=False)\n if \"name\" in attributes: # pragma no branch\n assert attributes[\"name\"] is None or isinstance(attributes[\"name\"], str), attributes[\"name\"]\n self._name = attributes[\"name\"]"},{"sha":"5653492bbd94babe3e1039d8c30eda3dde4349bb","filename":"github/HookDescription.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/HookDescription.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/HookDescription.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/HookDescription.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"41e242b3abfb1ac7e961ee5a524cdb0455d5b253","filename":"github/HookResponse.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/HookResponse.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/HookResponse.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/HookResponse.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"b849e8d459dc6ecbb28278d17680d175a30ba391","filename":"github/Issue.py","status":"modified","additions":18,"deletions":27,"changes":45,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Issue.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Issue.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Issue.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -6,6 +6,7 @@\n # Copyright 2012 Philip Kimmey #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Stuart Glaser #\n # Copyright 2013 Vincent Jacques #\n # #\n@@ -148,7 +149,7 @@ def repository(self):\n if self._repository is github.GithubObject.NotSet:\n # The repository was not set automatically, so it must be looked up by url.\n repo_url = \"/\".join(self.url.split(\"/\")[:-2])\n- self._repository = github.Repository.Repository(self._requester, {'url': repo_url}, False)\n+ self._repository = github.Repository.Repository(self._requester, self._headers, {'url': repo_url}, completed=False)\n return self._repository\n \n @property\n@@ -202,8 +203,7 @@ def add_to_labels(self, *labels):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/labels\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n \n def create_comment(self, body):\n@@ -219,10 +219,9 @@ def create_comment(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.IssueComment.IssueComment(self._requester, data, completed=True)\n+ return github.IssueComment.IssueComment(self._requester, headers, data, completed=True)\n \n def delete_labels(self):\n \"\"\"\n@@ -231,9 +230,7 @@ def delete_labels(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/labels\",\n- None,\n- None\n+ self.url + \"/labels\"\n )\n \n 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):\n@@ -269,8 +266,7 @@ def edit(self, title=github.GithubObject.NotSet, body=github.GithubObject.NotSet\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -283,11 +279,9 @@ def get_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self._parentUrl(self.url) + \"/comments/\" + str(id),\n- None,\n- None\n+ self._parentUrl(self.url) + \"/comments/\" + str(id)\n )\n- return github.IssueComment.IssueComment(self._requester, data, completed=True)\n+ return github.IssueComment.IssueComment(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -334,9 +328,7 @@ def remove_from_labels(self, label):\n assert isinstance(label, github.Label.Label), label\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/labels/\" + label._identity,\n- None,\n- None\n+ self.url + \"/labels/\" + label._identity\n )\n \n def set_labels(self, *labels):\n@@ -350,8 +342,7 @@ def set_labels(self, *labels):\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n self.url + \"/labels\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n \n @property\n@@ -381,7 +372,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"assignee\" in attributes: # pragma no branch\n assert attributes[\"assignee\"] is None or isinstance(attributes[\"assignee\"], dict), attributes[\"assignee\"]\n- self._assignee = None if attributes[\"assignee\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"assignee\"], completed=False)\n+ self._assignee = None if attributes[\"assignee\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"assignee\"], completed=False)\n if \"body\" in attributes: # pragma no branch\n assert attributes[\"body\"] is None or isinstance(attributes[\"body\"], str), attributes[\"body\"]\n self._body = attributes[\"body\"]\n@@ -390,7 +381,7 @@ def _useAttributes(self, attributes):\n self._closed_at = self._parseDatetime(attributes[\"closed_at\"])\n if \"closed_by\" in attributes: # pragma no branch\n assert attributes[\"closed_by\"] is None or isinstance(attributes[\"closed_by\"], dict), attributes[\"closed_by\"]\n- self._closed_by = None if attributes[\"closed_by\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"closed_by\"], completed=False)\n+ self._closed_by = None if attributes[\"closed_by\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"closed_by\"], completed=False)\n if \"comments\" in attributes: # pragma no branch\n assert attributes[\"comments\"] is None or isinstance(attributes[\"comments\"], (int, long)), attributes[\"comments\"]\n self._comments = attributes[\"comments\"]\n@@ -406,21 +397,21 @@ def _useAttributes(self, attributes):\n if \"labels\" in attributes: # pragma no branch\n assert attributes[\"labels\"] is None or all(isinstance(element, dict) for element in attributes[\"labels\"]), attributes[\"labels\"]\n self._labels = None if attributes[\"labels\"] is None else [\n- github.Label.Label(self._requester, element, completed=False)\n+ github.Label.Label(self._requester, self._headers, element, completed=False)\n for element in attributes[\"labels\"]\n ]\n if \"milestone\" in attributes: # pragma no branch\n assert attributes[\"milestone\"] is None or isinstance(attributes[\"milestone\"], dict), attributes[\"milestone\"]\n- self._milestone = None if attributes[\"milestone\"] is None else github.Milestone.Milestone(self._requester, attributes[\"milestone\"], completed=False)\n+ self._milestone = None if attributes[\"milestone\"] is None else github.Milestone.Milestone(self._requester, self._headers, attributes[\"milestone\"], completed=False)\n if \"number\" in attributes: # pragma no branch\n assert attributes[\"number\"] is None or isinstance(attributes[\"number\"], (int, long)), attributes[\"number\"]\n self._number = attributes[\"number\"]\n if \"pull_request\" in attributes: # pragma no branch\n assert attributes[\"pull_request\"] is None or isinstance(attributes[\"pull_request\"], dict), attributes[\"pull_request\"]\n- self._pull_request = None if attributes[\"pull_request\"] is None else github.IssuePullRequest.IssuePullRequest(self._requester, attributes[\"pull_request\"], completed=False)\n+ self._pull_request = None if attributes[\"pull_request\"] is None else github.IssuePullRequest.IssuePullRequest(self._requester, self._headers, attributes[\"pull_request\"], completed=False)\n if \"repository\" in attributes: # pragma no branch\n assert attributes[\"repository\"] is None or isinstance(attributes[\"repository\"], dict), attributes[\"repository\"]\n- self._repository = None if attributes[\"repository\"] is None else github.Repository.Repository(self._requester, attributes[\"repository\"], completed=False)\n+ self._repository = None if attributes[\"repository\"] is None else github.Repository.Repository(self._requester, self._headers, attributes[\"repository\"], completed=False)\n if \"state\" in attributes: # pragma no branch\n assert attributes[\"state\"] is None or isinstance(attributes[\"state\"], str), attributes[\"state\"]\n self._state = attributes[\"state\"]\n@@ -435,4 +426,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"149a6f6f1eafaf177dd951aa211f659a6975d72f","filename":"github/IssueComment.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/IssueComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/IssueComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/IssueComment.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Michael Stead #\n # Copyright 2013 Vincent Jacques #\n # #\n@@ -97,9 +98,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, body):\n@@ -115,8 +114,7 @@ def edit(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -150,4 +148,4 @@ def _useAttributes(self, attributes):\n self._html_url = attributes[\"html_url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"aca4cdf8a90313170980f3b75d11de61c6e3d202","filename":"github/IssueEvent.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/IssueEvent.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/IssueEvent.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/IssueEvent.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -102,7 +103,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"actor\" in attributes: # pragma no branch\n assert attributes[\"actor\"] is None or isinstance(attributes[\"actor\"], dict), attributes[\"actor\"]\n- self._actor = None if attributes[\"actor\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"actor\"], completed=False)\n+ self._actor = None if attributes[\"actor\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"actor\"], completed=False)\n if \"commit_id\" in attributes: # pragma no branch\n assert attributes[\"commit_id\"] is None or isinstance(attributes[\"commit_id\"], str), attributes[\"commit_id\"]\n self._commit_id = attributes[\"commit_id\"]\n@@ -117,7 +118,7 @@ def _useAttributes(self, attributes):\n self._id = attributes[\"id\"]\n if \"issue\" in attributes: # pragma no branch\n assert attributes[\"issue\"] is None or isinstance(attributes[\"issue\"], dict), attributes[\"issue\"]\n- self._issue = None if attributes[\"issue\"] is None else github.Issue.Issue(self._requester, attributes[\"issue\"], completed=False)\n+ self._issue = None if attributes[\"issue\"] is None else github.Issue.Issue(self._requester, self._headers, attributes[\"issue\"], completed=False)\n if \"url\" in attributes: # pragma no branch\n assert attributes[\"url\"] is None or isinstance(attributes[\"url\"], str), attributes[\"url\"]\n self._url = attributes[\"url\"]"},{"sha":"ae7e6b6c203695bc39cd5d057f80df638f8e8ccb","filename":"github/IssuePullRequest.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/IssuePullRequest.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/IssuePullRequest.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/IssuePullRequest.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"813cd5f015c056fdd9e1b0e2e4dc0d9265b5f238","filename":"github/Label.py","status":"modified","additions":3,"deletions":5,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Label.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Label.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Label.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -65,9 +66,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, name, color):\n@@ -86,8 +85,7 @@ def edit(self, name, color):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n "},{"sha":"cfe48d679963a0e10f861b76fa9a80cfd2ad85cc","filename":"github/Legacy.py","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Legacy.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Legacy.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Legacy.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -57,12 +58,12 @@ def get_page(self, page):\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n self.__url,\n- args,\n- None\n+ parameters=args\n )\n self.__continue = len(data[self.__key]) > 0\n+\n return [\n- self.__contentClass(self.__requester, self.__convert(element), completed=False)\n+ self.__contentClass(self.__requester, headers, self.__convert(element), completed=False)\n for element in data[self.__key]\n ]\n "},{"sha":"a4af1a618da0a5d865eb1675fd96a085bb0ab680","filename":"github/MainClass.py","status":"modified","additions":113,"deletions":44,"changes":157,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/MainClass.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/MainClass.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/MainClass.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,6 +2,7 @@\n \n ############################ Copyrights and license ############################\n # #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Ed Jackson #\n # Copyright 2013 Jonathan J Hunt #\n # Copyright 2013 Peter Golm #\n@@ -25,6 +26,7 @@\n ################################################################################\n \n import urllib\n+import pickle\n \n from Requester import Requester\n import AuthenticatedUser\n@@ -38,6 +40,8 @@\n import HookDescription\n import GitignoreTemplate\n import Notification\n+import Status\n+import StatusMessage\n \n \n DEFAULT_BASE_URL = \"https://api.github.com\"\n@@ -91,8 +95,12 @@ def __get_per_page(self):\n def __set_per_page(self, value):\n self.__requester.per_page = value\n \n+ # v2: Remove this property? Why should it be necessary to read/modify it after construction\n per_page = property(__get_per_page, __set_per_page)\n \n+ # v2: Provide a unified way to access values of headers of last response\n+ # v2: (and add/keep ad hoc properties for specific useful headers like rate limiting, oauth scopes, etc.)\n+ # v2: Return an instance of a class: using a tuple did not allow to add a field \"resettime\"\n @property\n def rate_limiting(self):\n \"\"\"\n@@ -103,9 +111,7 @@ def rate_limiting(self):\n if limit < 0:\n self.__requester.requestJsonAndCheck(\n 'GET',\n- '/rate_limit',\n- None,\n- None\n+ '/rate_limit'\n )\n return self.__requester.rate_limiting\n \n@@ -118,9 +124,7 @@ def rate_limiting_resettime(self):\n if self.__requester.rate_limiting_resettime == 0:\n self.__requester.requestJsonAndCheck(\n 'GET',\n- '/rate_limit',\n- None,\n- None\n+ '/rate_limit'\n )\n return self.__requester.rate_limiting_resettime\n \n@@ -139,15 +143,13 @@ def get_user(self, login=github.GithubObject.NotSet):\n \"\"\"\n assert login is github.GithubObject.NotSet or isinstance(login, str), login\n if login is github.GithubObject.NotSet:\n- return AuthenticatedUser.AuthenticatedUser(self.__requester, {\"url\": \"/user\"}, completed=False)\n+ return AuthenticatedUser.AuthenticatedUser(self.__requester, {}, {\"url\": \"/user\"}, completed=False)\n else:\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/users/\" + login,\n- None,\n- None\n+ \"/users/\" + login\n )\n- return github.NamedUser.NamedUser(self.__requester, data, completed=True)\n+ return github.NamedUser.NamedUser(self.__requester, headers, data, completed=True)\n \n def get_users(self, since=github.GithubObject.NotSet):\n \"\"\"\n@@ -175,11 +177,9 @@ def get_organization(self, login):\n assert isinstance(login, str), login\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/orgs/\" + login,\n- None,\n- None\n+ \"/orgs/\" + login\n )\n- return github.Organization.Organization(self.__requester, data, completed=True)\n+ return github.Organization.Organization(self.__requester, headers, data, completed=True)\n \n def get_repo(self, full_name):\n \"\"\"\n@@ -189,11 +189,26 @@ def get_repo(self, full_name):\n assert isinstance(full_name, str), full_name\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/repos/\" + full_name,\n- None,\n- None\n+ \"/repos/\" + full_name\n+ )\n+ return Repository.Repository(self.__requester, headers, data, completed=True)\n+\n+ def get_repos(self, since=github.GithubObject.NotSet):\n+ \"\"\"\n+ :calls: `GET /repositories `_\n+ :param since: integer\n+ :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.Repository.Repository`\n+ \"\"\"\n+ assert since is github.GithubObject.NotSet or isinstance(since, (int, long)), since\n+ url_parameters = dict()\n+ if since is not github.GithubObject.NotSet:\n+ url_parameters[\"since\"] = since\n+ return github.PaginatedList.PaginatedList(\n+ github.Repository.Repository,\n+ self.__requester,\n+ \"/repositories\",\n+ url_parameters\n )\n- return Repository.Repository(self.__requester, data, completed=True)\n \n def get_gist(self, id):\n \"\"\"\n@@ -204,11 +219,9 @@ def get_gist(self, id):\n assert isinstance(id, str), id\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/gists/\" + id,\n- None,\n- None\n+ \"/gists/\" + id\n )\n- return github.Gist.Gist(self.__requester, data, completed=True)\n+ return github.Gist.Gist(self.__requester, headers, data, completed=True)\n \n def get_gists(self):\n \"\"\"\n@@ -266,11 +279,9 @@ def legacy_search_user_by_email(self, email):\n assert isinstance(email, str), email\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/legacy/user/email/\" + email,\n- None,\n- None\n+ \"/legacy/user/email/\" + email\n )\n- return github.NamedUser.NamedUser(self.__requester, Legacy.convertUser(data[\"user\"]), completed=False)\n+ return github.NamedUser.NamedUser(self.__requester, headers, Legacy.convertUser(data[\"user\"]), completed=False)\n \n def render_markdown(self, text, context=github.GithubObject.NotSet):\n \"\"\"\n@@ -290,23 +301,20 @@ def render_markdown(self, text, context=github.GithubObject.NotSet):\n status, headers, data = self.__requester.requestJson(\n \"POST\",\n \"/markdown\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n return data\n \n def get_hooks(self):\n \"\"\"\n :calls: `GET /hooks `_\n- :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.HookDescription.HookDescription`\n+ :rtype: list of :class:`github.HookDescription.HookDescription`\n \"\"\"\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/hooks\",\n- None,\n- None\n+ \"/hooks\"\n )\n- return [HookDescription.HookDescription(self.__requester, attributes, completed=True) for attributes in data]\n+ return [HookDescription.HookDescription(self.__requester, headers, attributes, completed=True) for attributes in data]\n \n def get_gitignore_templates(self):\n \"\"\"\n@@ -315,9 +323,7 @@ def get_gitignore_templates(self):\n \"\"\"\n headers, data = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/gitignore/templates\",\n- None,\n- None\n+ \"/gitignore/templates\"\n )\n return data\n \n@@ -329,18 +335,81 @@ def get_gitignore_template(self, name):\n assert isinstance(name, str), name\n headers, attributes = self.__requester.requestJsonAndCheck(\n \"GET\",\n- \"/gitignore/templates/\" + name,\n- None,\n- None\n+ \"/gitignore/templates/\" + name\n )\n- return GitignoreTemplate.GitignoreTemplate(self.__requester, attributes, completed=True)\n+ return GitignoreTemplate.GitignoreTemplate(self.__requester, headers, attributes, completed=True)\n \n- def create_from_raw_data(self, klass, raw_data):\n+ def create_from_raw_data(self, klass, raw_data, headers={}):\n \"\"\"\n- Creates an object from raw_data previously obtained by :attr:`github.GithubObject.GithubObject.raw_data`\n+ Creates an object from raw_data previously obtained by :attr:`github.GithubObject.GithubObject.raw_data`,\n+ and optionaly headers previously obtained by :attr:`github.GithubObject.GithubObject.raw_headers`.\n \n :param klass: the class of the object to create\n :param raw_data: dict\n+ :param headers: dict\n :rtype: instance of class ``klass``\n \"\"\"\n- return klass(self.__requester, raw_data, completed=True)\n+ return klass(self.__requester, headers, raw_data, completed=True)\n+\n+ def dump(self, obj, file, protocol=0):\n+ \"\"\"\n+ Dumps (pickles) a PyGithub object to a file-like object.\n+ Some effort is made to not pickle sensitive informations like the Github credentials used in the :class:`Github` instance.\n+ But NO EFFORT is made to remove sensitive information from the object's attributes.\n+\n+ :param obj: the object to pickle\n+ :param file: the file-like object to pickle to\n+ :param protocol: the `pickling protocol `_\n+ \"\"\"\n+ pickle.dump((obj.__class__, obj.raw_data, obj.raw_headers), file, protocol)\n+\n+ def load(self, f):\n+ \"\"\"\n+ Loads (unpickles) a PyGithub object from a file-like object.\n+\n+ :param f: the file-like object to unpickle from\n+ :return: the unpickled object\n+ \"\"\"\n+ return self.create_from_raw_data(*pickle.load(f))\n+\n+ def get_api_status(self):\n+ \"\"\"\n+ This doesn't work with a Github Enterprise installation, because it always targets https://status.github.com.\n+\n+ :calls: `GET /api/status.json `_\n+ :rtype: :class:`github.Status.Status`\n+ \"\"\"\n+ headers, attributes = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ \"/api/status.json\",\n+ cnx=\"status\"\n+ )\n+ return Status.Status(self.__requester, headers, attributes, completed=True)\n+\n+ def get_last_api_status_message(self):\n+ \"\"\"\n+ This doesn't work with a Github Enterprise installation, because it always targets https://status.github.com.\n+\n+ :calls: `GET /api/last-message.json `_\n+ :rtype: :class:`github.StatusMessage.StatusMessage`\n+ \"\"\"\n+ headers, attributes = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ \"/api/last-message.json\",\n+ cnx=\"status\"\n+ )\n+ return StatusMessage.StatusMessage(self.__requester, headers, attributes, completed=True)\n+\n+ def get_api_status_messages(self):\n+ \"\"\"\n+ This doesn't work with a Github Enterprise installation, because it always targets https://status.github.com.\n+\n+ :calls: `GET /api/messages.json `_\n+ :rtype: list of :class:`github.StatusMessage.StatusMessage`\n+ \"\"\"\n+ headers, data = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ \"/api/messages.json\",\n+ cnx=\"status\"\n+ )\n+ return [StatusMessage.StatusMessage(self.__requester, headers, attributes, completed=True) for attributes in data]"},{"sha":"c07ec38911b95b9baaccd7926cab22c549a9e5dd","filename":"github/Milestone.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Milestone.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Milestone.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Milestone.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -133,9 +134,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, title, state=github.GithubObject.NotSet, description=github.GithubObject.NotSet, due_on=github.GithubObject.NotSet):\n@@ -163,8 +162,7 @@ def edit(self, title, state=github.GithubObject.NotSet, description=github.Githu\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -206,7 +204,7 @@ def _useAttributes(self, attributes):\n self._created_at = self._parseDatetime(attributes[\"created_at\"])\n if \"creator\" in attributes: # pragma no branch\n assert attributes[\"creator\"] is None or isinstance(attributes[\"creator\"], dict), attributes[\"creator\"]\n- self._creator = None if attributes[\"creator\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"creator\"], completed=False)\n+ self._creator = None if attributes[\"creator\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"creator\"], completed=False)\n if \"description\" in attributes: # pragma no branch\n assert attributes[\"description\"] is None or isinstance(attributes[\"description\"], str), attributes[\"description\"]\n self._description = attributes[\"description\"]"},{"sha":"ec9bfbeddafff7bdf23258a08dc9f0ac8f4d964c","filename":"github/NamedUser.py","status":"modified","additions":19,"deletions":8,"changes":27,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/NamedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/NamedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/NamedUser.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -268,10 +269,9 @@ def create_gist(self, public, files, description=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/gists\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Gist.Gist(self._requester, data, completed=True)\n+ return github.Gist.Gist(self._requester, headers, data, completed=True)\n \n def get_events(self):\n \"\"\"\n@@ -390,11 +390,9 @@ def get_repo(self, name):\n assert isinstance(name, str), name\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/repos/\" + self.login + \"/\" + name,\n- None,\n- None\n+ \"/repos/\" + self.login + \"/\" + name\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def get_repos(self, type=github.GithubObject.NotSet):\n \"\"\"\n@@ -449,6 +447,19 @@ def get_watched(self):\n None\n )\n \n+ def has_in_following(self, following):\n+ \"\"\"\n+ :calls: `GET /user/:user/following/:target_user `_\n+ :param following: :class:`github.NamedUser.NamedUser`\n+ :rtype: bool\n+ \"\"\"\n+ assert isinstance(following, github.NamedUser.NamedUser), following\n+ status, headers, data = self._requester.requestJson(\n+ \"GET\",\n+ self.url + \"/following/\" + following._identity\n+ )\n+ return status == 204\n+\n @property\n def _identity(self):\n return self.login\n@@ -541,7 +552,7 @@ def _useAttributes(self, attributes):\n self._owned_private_repos = attributes[\"owned_private_repos\"]\n if \"plan\" in attributes: # pragma no branch\n assert attributes[\"plan\"] is None or isinstance(attributes[\"plan\"], dict), attributes[\"plan\"]\n- self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, attributes[\"plan\"], completed=False)\n+ self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, self._headers, attributes[\"plan\"], completed=False)\n if \"private_gists\" in attributes: # pragma no branch\n assert attributes[\"private_gists\"] is None or isinstance(attributes[\"private_gists\"], (int, long)), attributes[\"private_gists\"]\n self._private_gists = attributes[\"private_gists\"]"},{"sha":"bb1c96b6780fb31573952d049166fd68ecb5a64a","filename":"github/Notification.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Notification.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Notification.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Notification.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,6 +2,7 @@\n \n ############################ Copyrights and license ############################\n # #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Peter Golm #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n@@ -104,10 +105,10 @@ def _useAttributes(self, attributes):\n self._id = attributes[\"id\"]\n if \"repository\" in attributes: # pragma no branch\n assert attributes[\"repository\"] is None or isinstance(attributes[\"repository\"], dict), attributes[\"repository\"]\n- self._repository = None if attributes[\"repository\"] is None else github.Repository.Repository(self._requester, attributes[\"repository\"], completed=False)\n+ self._repository = None if attributes[\"repository\"] is None else github.Repository.Repository(self._requester, self._headers, attributes[\"repository\"], completed=False)\n if \"subject\" in attributes: # pragma no branch\n assert attributes[\"subject\"] is None or isinstance(attributes[\"subject\"], dict), attributes[\"subject\"]\n- self._subject = None if attributes[\"subject\"] is None else github.NotificationSubject.NotificationSubject(self._requester, attributes[\"subject\"], completed=False)\n+ self._subject = None if attributes[\"subject\"] is None else github.NotificationSubject.NotificationSubject(self._requester, self._headers, attributes[\"subject\"], completed=False)\n if \"reason\" in attributes: # pragma no branch\n assert attributes[\"reason\"] is None or isinstance(attributes[\"reason\"], str), attributes[\"reason\"]\n self._reason = attributes[\"reason\"]"},{"sha":"7e1ce3adbf00f58e49724f0af978be5294a5b6f1","filename":"github/NotificationSubject.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/NotificationSubject.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/NotificationSubject.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/NotificationSubject.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,6 +2,7 @@\n \n ############################ Copyrights and license ############################\n # #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"68245f3e28173790bcae32b16120ab027b995188","filename":"github/Organization.py","status":"modified","additions":18,"deletions":35,"changes":53,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Organization.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Organization.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Organization.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -243,9 +244,7 @@ def add_to_public_members(self, public_member):\n assert isinstance(public_member, github.NamedUser.NamedUser), public_member\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/public_members/\" + public_member._identity,\n- None,\n- None\n+ self.url + \"/public_members/\" + public_member._identity\n )\n \n def create_fork(self, repo):\n@@ -261,10 +260,9 @@ def create_fork(self, repo):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n \"/repos/\" + repo.owner.login + \"/\" + repo.name + \"/forks\",\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def create_repo(self, name, description=github.GithubObject.NotSet, homepage=github.GithubObject.NotSet, private=github.GithubObject.NotSet, has_issues=github.GithubObject.NotSet, has_wiki=github.GithubObject.NotSet, has_downloads=github.GithubObject.NotSet, team_id=github.GithubObject.NotSet, auto_init=github.GithubObject.NotSet, gitignore_template=github.GithubObject.NotSet):\n \"\"\"\n@@ -315,10 +313,9 @@ def create_repo(self, name, description=github.GithubObject.NotSet, homepage=git\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/repos\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def create_team(self, name, repo_names=github.GithubObject.NotSet, permission=github.GithubObject.NotSet):\n \"\"\"\n@@ -341,10 +338,9 @@ def create_team(self, name, repo_names=github.GithubObject.NotSet, permission=gi\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/teams\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Team.Team(self._requester, data, completed=True)\n+ return github.Team.Team(self._requester, headers, data, completed=True)\n \n def edit(self, billing_email=github.GithubObject.NotSet, blog=github.GithubObject.NotSet, company=github.GithubObject.NotSet, email=github.GithubObject.NotSet, location=github.GithubObject.NotSet, name=github.GithubObject.NotSet):\n \"\"\"\n@@ -379,8 +375,7 @@ def edit(self, billing_email=github.GithubObject.NotSet, blog=github.GithubObjec\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -467,11 +462,9 @@ def get_repo(self, name):\n assert isinstance(name, str), name\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/repos/\" + self.login + \"/\" + name,\n- None,\n- None\n+ \"/repos/\" + self.login + \"/\" + name\n )\n- return github.Repository.Repository(self._requester, data, completed=True)\n+ return github.Repository.Repository(self._requester, headers, data, completed=True)\n \n def get_repos(self, type=github.GithubObject.NotSet):\n \"\"\"\n@@ -499,11 +492,9 @@ def get_team(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/teams/\" + str(id),\n- None,\n- None\n+ \"/teams/\" + str(id)\n )\n- return github.Team.Team(self._requester, data, completed=True)\n+ return github.Team.Team(self._requester, headers, data, completed=True)\n \n def get_teams(self):\n \"\"\"\n@@ -526,9 +517,7 @@ def has_in_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n return status == 204\n \n@@ -541,9 +530,7 @@ def has_in_public_members(self, public_member):\n assert isinstance(public_member, github.NamedUser.NamedUser), public_member\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/public_members/\" + public_member._identity,\n- None,\n- None\n+ self.url + \"/public_members/\" + public_member._identity\n )\n return status == 204\n \n@@ -556,9 +543,7 @@ def remove_from_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n \n def remove_from_public_members(self, public_member):\n@@ -570,9 +555,7 @@ def remove_from_public_members(self, public_member):\n assert isinstance(public_member, github.NamedUser.NamedUser), public_member\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/public_members/\" + public_member._identity,\n- None,\n- None\n+ self.url + \"/public_members/\" + public_member._identity\n )\n \n def _initAttributes(self):\n@@ -655,7 +638,7 @@ def _useAttributes(self, attributes):\n self._owned_private_repos = attributes[\"owned_private_repos\"]\n if \"plan\" in attributes: # pragma no branch\n assert attributes[\"plan\"] is None or isinstance(attributes[\"plan\"], dict), attributes[\"plan\"]\n- self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, attributes[\"plan\"], completed=False)\n+ self._plan = None if attributes[\"plan\"] is None else github.Plan.Plan(self._requester, self._headers, attributes[\"plan\"], completed=False)\n if \"private_gists\" in attributes: # pragma no branch\n assert attributes[\"private_gists\"] is None or isinstance(attributes[\"private_gists\"], (int, long)), attributes[\"private_gists\"]\n self._private_gists = attributes[\"private_gists\"]"},{"sha":"4c22b991def262d6e5032a708ba610f65417f1b9","filename":"github/PaginatedList.py","status":"modified","additions":18,"deletions":5,"changes":23,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PaginatedList.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PaginatedList.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PaginatedList.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Bill Mill #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 davidbrai #\n@@ -118,7 +119,11 @@ def __init__(self, contentClass, requester, firstUrl, firstParams):\n self._reversed = False\n \n def _getLastPageUrl(self):\n- headers, data = self.__requester.requestJsonAndCheck(\"GET\", self.__firstUrl, self.__nextParams, None)\n+ headers, data = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ self.__firstUrl,\n+ parameters=self.__nextParams\n+ )\n links = self.__parseLinkHeader(headers)\n lastUrl = links.get(\"last\")\n return lastUrl\n@@ -139,7 +144,11 @@ def _couldGrow(self):\n return self.__nextUrl is not None\n \n def _fetchNextPage(self):\n- headers, data = self.__requester.requestJsonAndCheck(\"GET\", self.__nextUrl, self.__nextParams, None)\n+ headers, data = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ self.__nextUrl,\n+ parameters=self.__nextParams\n+ )\n \n self.__nextUrl = None\n if len(data) > 0:\n@@ -152,7 +161,7 @@ def _fetchNextPage(self):\n self.__nextParams = None\n \n content = [\n- self.__contentClass(self.__requester, element, completed=False)\n+ self.__contentClass(self.__requester, headers, element, completed=False)\n for element in data\n ]\n if self._reversed:\n@@ -176,9 +185,13 @@ def get_page(self, page):\n params[\"page\"] = page + 1\n if self.__requester.per_page != 30:\n params[\"per_page\"] = self.__requester.per_page\n- headers, data = self.__requester.requestJsonAndCheck(\"GET\", self.__firstUrl, params, None)\n+ headers, data = self.__requester.requestJsonAndCheck(\n+ \"GET\",\n+ self.__firstUrl,\n+ parameters=params\n+ )\n \n return [\n- self.__contentClass(self.__requester, element, completed=False)\n+ self.__contentClass(self.__requester, headers, element, completed=False)\n for element in data\n ]"},{"sha":"3a3b420615062ee9e8a4fff31b65bd575c65d5a9","filename":"github/Permissions.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Permissions.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Permissions.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Permissions.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"99a3c3a6d9b4bef7b9bc78f0bd247a4083a2285e","filename":"github/Plan.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Plan.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Plan.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Plan.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #"},{"sha":"85867c60e0f888692b9410f45be43cb69528ca0b","filename":"github/PullRequest.py","status":"modified","additions":18,"deletions":27,"changes":45,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequest.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequest.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PullRequest.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -5,6 +5,7 @@\n # Copyright 2012 Michael Stead #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -291,10 +292,9 @@ def create_review_comment(self, body, commit_id, path, position):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.PullRequestComment.PullRequestComment(self._requester, data, completed=True)\n+ return github.PullRequestComment.PullRequestComment(self._requester, headers, data, completed=True)\n \n def create_issue_comment(self, body):\n \"\"\"\n@@ -309,10 +309,9 @@ def create_issue_comment(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self._parentUrl(self._parentUrl(self.url)) + \"/issues/\" + str(self.number) + \"/comments\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.IssueComment.IssueComment(self._requester, data, completed=True)\n+ return github.IssueComment.IssueComment(self._requester, headers, data, completed=True)\n \n def edit(self, title=github.GithubObject.NotSet, body=github.GithubObject.NotSet, state=github.GithubObject.NotSet):\n \"\"\"\n@@ -335,8 +334,7 @@ def edit(self, title=github.GithubObject.NotSet, body=github.GithubObject.NotSet\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -357,11 +355,9 @@ def get_review_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self._parentUrl(self.url) + \"/comments/\" + str(id),\n- None,\n- None\n+ self._parentUrl(self.url) + \"/comments/\" + str(id)\n )\n- return github.PullRequestComment.PullRequestComment(self._requester, data, completed=True)\n+ return github.PullRequestComment.PullRequestComment(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -415,11 +411,9 @@ def get_issue_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self._parentUrl(self._parentUrl(self.url)) + \"/issues/comments/\" + str(id),\n- None,\n- None\n+ self._parentUrl(self._parentUrl(self.url)) + \"/issues/comments/\" + str(id)\n )\n- return github.IssueComment.IssueComment(self._requester, data, completed=True)\n+ return github.IssueComment.IssueComment(self._requester, headers, data, completed=True)\n \n def get_issue_comments(self):\n \"\"\"\n@@ -440,9 +434,7 @@ def is_merged(self):\n \"\"\"\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/merge\",\n- None,\n- None\n+ self.url + \"/merge\"\n )\n return status == 204\n \n@@ -459,10 +451,9 @@ def merge(self, commit_message=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n self.url + \"/merge\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.PullRequestMergeStatus.PullRequestMergeStatus(self._requester, data, completed=True)\n+ return github.PullRequestMergeStatus.PullRequestMergeStatus(self._requester, headers, data, completed=True)\n \n def _initAttributes(self):\n self._additions = github.GithubObject.NotSet\n@@ -499,10 +490,10 @@ def _useAttributes(self, attributes):\n self._additions = attributes[\"additions\"]\n if \"assignee\" in attributes: # pragma no branch\n assert attributes[\"assignee\"] is None or isinstance(attributes[\"assignee\"], dict), attributes[\"assignee\"]\n- self._assignee = None if attributes[\"assignee\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"assignee\"], completed=False)\n+ self._assignee = None if attributes[\"assignee\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"assignee\"], completed=False)\n if \"base\" in attributes: # pragma no branch\n assert attributes[\"base\"] is None or isinstance(attributes[\"base\"], dict), attributes[\"base\"]\n- self._base = None if attributes[\"base\"] is None else github.PullRequestPart.PullRequestPart(self._requester, attributes[\"base\"], completed=False)\n+ self._base = None if attributes[\"base\"] is None else github.PullRequestPart.PullRequestPart(self._requester, self._headers, attributes[\"base\"], completed=False)\n if \"body\" in attributes: # pragma no branch\n assert attributes[\"body\"] is None or isinstance(attributes[\"body\"], str), attributes[\"body\"]\n self._body = attributes[\"body\"]\n@@ -529,7 +520,7 @@ def _useAttributes(self, attributes):\n self._diff_url = attributes[\"diff_url\"]\n if \"head\" in attributes: # pragma no branch\n assert attributes[\"head\"] is None or isinstance(attributes[\"head\"], dict), attributes[\"head\"]\n- self._head = None if attributes[\"head\"] is None else github.PullRequestPart.PullRequestPart(self._requester, attributes[\"head\"], completed=False)\n+ self._head = None if attributes[\"head\"] is None else github.PullRequestPart.PullRequestPart(self._requester, self._headers, attributes[\"head\"], completed=False)\n if \"html_url\" in attributes: # pragma no branch\n assert attributes[\"html_url\"] is None or isinstance(attributes[\"html_url\"], str), attributes[\"html_url\"]\n self._html_url = attributes[\"html_url\"]\n@@ -550,7 +541,7 @@ def _useAttributes(self, attributes):\n self._merged_at = self._parseDatetime(attributes[\"merged_at\"])\n if \"merged_by\" in attributes: # pragma no branch\n assert attributes[\"merged_by\"] is None or isinstance(attributes[\"merged_by\"], dict), attributes[\"merged_by\"]\n- self._merged_by = None if attributes[\"merged_by\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"merged_by\"], completed=False)\n+ self._merged_by = None if attributes[\"merged_by\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"merged_by\"], completed=False)\n if \"number\" in attributes: # pragma no branch\n assert attributes[\"number\"] is None or isinstance(attributes[\"number\"], (int, long)), attributes[\"number\"]\n self._number = attributes[\"number\"]\n@@ -574,4 +565,4 @@ def _useAttributes(self, attributes):\n self._url = attributes[\"url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"1e96426e98b1f17f5ec26185257276cafabb376b","filename":"github/PullRequestComment.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestComment.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestComment.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PullRequestComment.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Michael Stead #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n@@ -138,9 +139,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, body):\n@@ -156,8 +155,7 @@ def edit(self, body):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -211,4 +209,4 @@ def _useAttributes(self, attributes):\n self._html_url = attributes[\"html_url\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"9c416dbd5a260662bca2f7d8d3725e87f822ae06","filename":"github/PullRequestMergeStatus.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestMergeStatus.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestMergeStatus.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PullRequestMergeStatus.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #"},{"sha":"791452b028bd4d1a970b78581b849bb755be2efa","filename":"github/PullRequestPart.py","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestPart.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/PullRequestPart.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/PullRequestPart.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -85,10 +86,10 @@ def _useAttributes(self, attributes):\n self._ref = attributes[\"ref\"]\n if \"repo\" in attributes: # pragma no branch\n assert attributes[\"repo\"] is None or isinstance(attributes[\"repo\"], dict), attributes[\"repo\"]\n- self._repo = None if attributes[\"repo\"] is None else github.Repository.Repository(self._requester, attributes[\"repo\"], completed=False)\n+ self._repo = None if attributes[\"repo\"] is None else github.Repository.Repository(self._requester, self._headers, attributes[\"repo\"], completed=False)\n if \"sha\" in attributes: # pragma no branch\n assert attributes[\"sha\"] is None or isinstance(attributes[\"sha\"], str), attributes[\"sha\"]\n self._sha = attributes[\"sha\"]\n if \"user\" in attributes: # pragma no branch\n assert attributes[\"user\"] is None or isinstance(attributes[\"user\"], dict), attributes[\"user\"]\n- self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"user\"], completed=False)\n+ self._user = None if attributes[\"user\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"user\"], completed=False)"},{"sha":"7eb3d235917b3a63e8d31caefae5cba981a25134","filename":"github/Repository.py","status":"modified","additions":85,"deletions":152,"changes":237,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Repository.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Repository.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Repository.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -7,6 +7,7 @@\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n # Copyright 2013 Adrian Petrescu #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Mark Roddy #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n@@ -316,9 +317,7 @@ def add_to_collaborators(self, collaborator):\n assert isinstance(collaborator, github.NamedUser.NamedUser), collaborator\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/collaborators/\" + collaborator._identity,\n- None,\n- None\n+ self.url + \"/collaborators/\" + collaborator._identity\n )\n \n def compare(self, base, head):\n@@ -332,11 +331,9 @@ def compare(self, base, head):\n assert isinstance(head, str), head\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/compare/\" + base + \"...\" + head,\n- None,\n- None\n+ self.url + \"/compare/\" + base + \"...\" + head\n )\n- return github.Comparison.Comparison(self._requester, data, completed=True)\n+ return github.Comparison.Comparison(self._requester, headers, data, completed=True)\n \n def create_download(self, name, size, description=github.GithubObject.NotSet, content_type=github.GithubObject.NotSet):\n \"\"\"\n@@ -362,10 +359,9 @@ def create_download(self, name, size, description=github.GithubObject.NotSet, co\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/downloads\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Download.Download(self._requester, data, completed=True)\n+ return github.Download.Download(self._requester, headers, data, completed=True)\n \n def create_git_blob(self, content, encoding):\n \"\"\"\n@@ -383,10 +379,9 @@ def create_git_blob(self, content, encoding):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/blobs\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitBlob.GitBlob(self._requester, data, completed=True)\n+ return github.GitBlob.GitBlob(self._requester, headers, data, completed=True)\n \n def create_git_commit(self, message, tree, parents, author=github.GithubObject.NotSet, committer=github.GithubObject.NotSet):\n \"\"\"\n@@ -415,10 +410,9 @@ def create_git_commit(self, message, tree, parents, author=github.GithubObject.N\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/commits\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitCommit.GitCommit(self._requester, data, completed=True)\n+ return github.GitCommit.GitCommit(self._requester, headers, data, completed=True)\n \n def create_git_ref(self, ref, sha):\n \"\"\"\n@@ -436,10 +430,9 @@ def create_git_ref(self, ref, sha):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/refs\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitRef.GitRef(self._requester, data, completed=True)\n+ return github.GitRef.GitRef(self._requester, headers, data, completed=True)\n \n def create_git_tag(self, tag, message, object, type, tagger=github.GithubObject.NotSet):\n \"\"\"\n@@ -467,10 +460,9 @@ def create_git_tag(self, tag, message, object, type, tagger=github.GithubObject.\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/tags\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitTag.GitTag(self._requester, data, completed=True)\n+ return github.GitTag.GitTag(self._requester, headers, data, completed=True)\n \n def create_git_tree(self, tree, base_tree=github.GithubObject.NotSet):\n \"\"\"\n@@ -489,10 +481,9 @@ def create_git_tree(self, tree, base_tree=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/git/trees\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.GitTree.GitTree(self._requester, data, completed=True)\n+ return github.GitTree.GitTree(self._requester, headers, data, completed=True)\n \n def create_hook(self, name, config, events=github.GithubObject.NotSet, active=github.GithubObject.NotSet):\n \"\"\"\n@@ -518,10 +509,9 @@ def create_hook(self, name, config, events=github.GithubObject.NotSet, active=gi\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/hooks\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Hook.Hook(self._requester, data, completed=True)\n+ return github.Hook.Hook(self._requester, headers, data, completed=True)\n \n def create_issue(self, title, body=github.GithubObject.NotSet, assignee=github.GithubObject.NotSet, milestone=github.GithubObject.NotSet, labels=github.GithubObject.NotSet):\n \"\"\"\n@@ -552,10 +542,9 @@ def create_issue(self, title, body=github.GithubObject.NotSet, assignee=github.G\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/issues\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Issue.Issue(self._requester, data, completed=True)\n+ return github.Issue.Issue(self._requester, headers, data, completed=True)\n \n def create_key(self, title, key):\n \"\"\"\n@@ -573,10 +562,9 @@ def create_key(self, title, key):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/keys\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.RepositoryKey.RepositoryKey(self._requester, data, completed=True, repoUrl=self._url)\n+ return github.RepositoryKey.RepositoryKey(self._requester, headers, data, completed=True, repoUrl=self._url)\n \n def create_label(self, name, color):\n \"\"\"\n@@ -594,10 +582,9 @@ def create_label(self, name, color):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/labels\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Label.Label(self._requester, data, completed=True)\n+ return github.Label.Label(self._requester, headers, data, completed=True)\n \n def create_milestone(self, title, state=github.GithubObject.NotSet, description=github.GithubObject.NotSet, due_on=github.GithubObject.NotSet):\n \"\"\"\n@@ -624,10 +611,9 @@ def create_milestone(self, title, state=github.GithubObject.NotSet, description=\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/milestones\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.Milestone.Milestone(self._requester, data, completed=True)\n+ return github.Milestone.Milestone(self._requester, headers, data, completed=True)\n \n def create_pull(self, *args, **kwds):\n \"\"\"\n@@ -662,10 +648,9 @@ def __create_pull(self, **kwds):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/pulls\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n- return github.PullRequest.PullRequest(self._requester, data, completed=True)\n+ return github.PullRequest.PullRequest(self._requester, headers, data, completed=True)\n \n def delete(self):\n \"\"\"\n@@ -674,9 +659,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n 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):\n@@ -720,8 +703,7 @@ def edit(self, name, description=github.GithubObject.NotSet, homepage=github.Git\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -739,9 +721,7 @@ def get_archive_link(self, archive_format, ref=github.GithubObject.NotSet):\n url += \"/\" + ref\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- url,\n- None,\n- None\n+ url\n )\n return headers[\"location\"]\n \n@@ -766,11 +746,9 @@ def get_branch(self, branch):\n assert isinstance(branch, str), branch\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/branches/\" + branch,\n- None,\n- None\n+ self.url + \"/branches/\" + branch\n )\n- return github.Branch.Branch(self._requester, data, completed=True)\n+ return github.Branch.Branch(self._requester, headers, data, completed=True)\n \n def get_branches(self):\n \"\"\"\n@@ -805,11 +783,9 @@ def get_comment(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/comments/\" + str(id),\n- None,\n- None\n+ self.url + \"/comments/\" + str(id)\n )\n- return github.CommitComment.CommitComment(self._requester, data, completed=True)\n+ return github.CommitComment.CommitComment(self._requester, headers, data, completed=True)\n \n def get_comments(self):\n \"\"\"\n@@ -832,11 +808,9 @@ def get_commit(self, sha):\n assert isinstance(sha, str), sha\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/commits/\" + sha,\n- None,\n- None\n+ self.url + \"/commits/\" + sha\n )\n- return github.Commit.Commit(self._requester, data, completed=True)\n+ return github.Commit.Commit(self._requester, headers, data, completed=True)\n \n def get_commits(self, sha=github.GithubObject.NotSet, path=github.GithubObject.NotSet, since=github.GithubObject.NotSet, until=github.GithubObject.NotSet):\n \"\"\"\n@@ -891,10 +865,9 @@ def get_contents(self, path, ref=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n self.url + \"/contents\" + path,\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n- return github.ContentFile.ContentFile(self._requester, data, completed=True)\n+ return github.ContentFile.ContentFile(self._requester, headers, data, completed=True)\n \n def get_dir_contents(self, path, ref=github.GithubObject.NotSet):\n \"\"\"\n@@ -911,8 +884,7 @@ def get_dir_contents(self, path, ref=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n self.url + \"/contents\" + path,\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n \n # Handle 302 redirect response\n@@ -920,12 +892,11 @@ def get_dir_contents(self, path, ref=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n headers['location'],\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n \n return [\n- github.ContentFile.ContentFile(self._requester, attributes, completed=(attributes[\"type\"] != \"file\")) # Lazy completion only makes sense for files. See discussion here: https://github.com/jacquev6/PyGithub/issues/140#issuecomment-13481130\n+ github.ContentFile.ContentFile(self._requester, headers, attributes, completed=(attributes[\"type\"] != \"file\")) # Lazy completion only makes sense for files. See discussion here: https://github.com/jacquev6/PyGithub/issues/140#issuecomment-13481130\n for attributes in data\n ]\n \n@@ -950,11 +921,9 @@ def get_download(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/downloads/\" + str(id),\n- None,\n- None\n+ self.url + \"/downloads/\" + str(id)\n )\n- return github.Download.Download(self._requester, data, completed=True)\n+ return github.Download.Download(self._requester, headers, data, completed=True)\n \n def get_downloads(self):\n \"\"\"\n@@ -1001,11 +970,9 @@ def get_git_blob(self, sha):\n assert isinstance(sha, str), sha\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/git/blobs/\" + sha,\n- None,\n- None\n+ self.url + \"/git/blobs/\" + sha\n )\n- return github.GitBlob.GitBlob(self._requester, data, completed=True)\n+ return github.GitBlob.GitBlob(self._requester, headers, data, completed=True)\n \n def get_git_commit(self, sha):\n \"\"\"\n@@ -1016,11 +983,9 @@ def get_git_commit(self, sha):\n assert isinstance(sha, str), sha\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/git/commits/\" + sha,\n- None,\n- None\n+ self.url + \"/git/commits/\" + sha\n )\n- return github.GitCommit.GitCommit(self._requester, data, completed=True)\n+ return github.GitCommit.GitCommit(self._requester, headers, data, completed=True)\n \n def get_git_ref(self, ref):\n \"\"\"\n@@ -1034,11 +999,9 @@ def get_git_ref(self, ref):\n assert isinstance(ref, str), ref\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + prefix + ref,\n- None,\n- None\n+ self.url + prefix + ref\n )\n- return github.GitRef.GitRef(self._requester, data, completed=True)\n+ return github.GitRef.GitRef(self._requester, headers, data, completed=True)\n \n def get_git_refs(self):\n \"\"\"\n@@ -1061,11 +1024,9 @@ def get_git_tag(self, sha):\n assert isinstance(sha, str), sha\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/git/tags/\" + sha,\n- None,\n- None\n+ self.url + \"/git/tags/\" + sha\n )\n- return github.GitTag.GitTag(self._requester, data, completed=True)\n+ return github.GitTag.GitTag(self._requester, headers, data, completed=True)\n \n def get_git_tree(self, sha, recursive=github.GithubObject.NotSet):\n \"\"\"\n@@ -1082,10 +1043,9 @@ def get_git_tree(self, sha, recursive=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n self.url + \"/git/trees/\" + sha,\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n- return github.GitTree.GitTree(self._requester, data, completed=True)\n+ return github.GitTree.GitTree(self._requester, headers, data, completed=True)\n \n def get_hook(self, id):\n \"\"\"\n@@ -1096,11 +1056,9 @@ def get_hook(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/hooks/\" + str(id),\n- None,\n- None\n+ self.url + \"/hooks/\" + str(id)\n )\n- return github.Hook.Hook(self._requester, data, completed=True)\n+ return github.Hook.Hook(self._requester, headers, data, completed=True)\n \n def get_hooks(self):\n \"\"\"\n@@ -1123,11 +1081,9 @@ def get_issue(self, number):\n assert isinstance(number, (int, long)), number\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/issues/\" + str(number),\n- None,\n- None\n+ self.url + \"/issues/\" + str(number)\n )\n- return github.Issue.Issue(self._requester, data, completed=True)\n+ return github.Issue.Issue(self._requester, headers, data, completed=True)\n \n def get_issues(self, milestone=github.GithubObject.NotSet, state=github.GithubObject.NotSet, assignee=github.GithubObject.NotSet, mentioned=github.GithubObject.NotSet, labels=github.GithubObject.NotSet, sort=github.GithubObject.NotSet, direction=github.GithubObject.NotSet, since=github.GithubObject.NotSet):\n \"\"\"\n@@ -1214,11 +1170,9 @@ def get_issues_event(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/issues/events/\" + str(id),\n- None,\n- None\n+ self.url + \"/issues/events/\" + str(id)\n )\n- return github.IssueEvent.IssueEvent(self._requester, data, completed=True)\n+ return github.IssueEvent.IssueEvent(self._requester, headers, data, completed=True)\n \n def get_issues_events(self):\n \"\"\"\n@@ -1241,11 +1195,9 @@ def get_key(self, id):\n assert isinstance(id, (int, long)), id\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/keys/\" + str(id),\n- None,\n- None\n+ self.url + \"/keys/\" + str(id)\n )\n- return github.RepositoryKey.RepositoryKey(self._requester, data, completed=True, repoUrl=self._url)\n+ return github.RepositoryKey.RepositoryKey(self._requester, headers, data, completed=True, repoUrl=self._url)\n \n def get_keys(self):\n \"\"\"\n@@ -1253,7 +1205,7 @@ def get_keys(self):\n :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.RepositoryKey.RepositoryKey`\n \"\"\"\n return github.PaginatedList.PaginatedList(\n- lambda requester, data, completed: github.RepositoryKey.RepositoryKey(requester, data, completed, repoUrl=self._url),\n+ lambda requester, headers, data, completed: github.RepositoryKey.RepositoryKey(requester, headers, data, completed, repoUrl=self._url),\n self._requester,\n self.url + \"/keys\",\n None\n@@ -1268,11 +1220,9 @@ def get_label(self, name):\n assert isinstance(name, str), name\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/labels/\" + urllib.quote(name),\n- None,\n- None\n+ self.url + \"/labels/\" + urllib.quote(name)\n )\n- return github.Label.Label(self._requester, data, completed=True)\n+ return github.Label.Label(self._requester, headers, data, completed=True)\n \n def get_labels(self):\n \"\"\"\n@@ -1293,9 +1243,7 @@ def get_languages(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/languages\",\n- None,\n- None\n+ self.url + \"/languages\"\n )\n return data\n \n@@ -1308,11 +1256,9 @@ def get_milestone(self, number):\n assert isinstance(number, (int, long)), number\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/milestones/\" + str(number),\n- None,\n- None\n+ self.url + \"/milestones/\" + str(number)\n )\n- return github.Milestone.Milestone(self._requester, data, completed=True)\n+ return github.Milestone.Milestone(self._requester, headers, data, completed=True)\n \n def get_milestones(self, state=github.GithubObject.NotSet, sort=github.GithubObject.NotSet, direction=github.GithubObject.NotSet):\n \"\"\"\n@@ -1360,11 +1306,9 @@ def get_pull(self, number):\n assert isinstance(number, (int, long)), number\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- self.url + \"/pulls/\" + str(number),\n- None,\n- None\n+ self.url + \"/pulls/\" + str(number)\n )\n- return github.PullRequest.PullRequest(self._requester, data, completed=True)\n+ return github.PullRequest.PullRequest(self._requester, headers, data, completed=True)\n \n def get_pulls(self, state=github.GithubObject.NotSet):\n \"\"\"\n@@ -1431,10 +1375,9 @@ def get_readme(self, ref=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n self.url + \"/readme\",\n- url_parameters,\n- None\n+ parameters=url_parameters\n )\n- return github.ContentFile.ContentFile(self._requester, data, completed=True)\n+ return github.ContentFile.ContentFile(self._requester, headers, data, completed=True)\n \n def get_stargazers(self):\n \"\"\"\n@@ -1505,9 +1448,7 @@ def has_in_assignees(self, assignee):\n assert isinstance(assignee, github.NamedUser.NamedUser), assignee\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/assignees/\" + assignee._identity,\n- None,\n- None\n+ self.url + \"/assignees/\" + assignee._identity\n )\n return status == 204\n \n@@ -1520,9 +1461,7 @@ def has_in_collaborators(self, collaborator):\n assert isinstance(collaborator, github.NamedUser.NamedUser), collaborator\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/collaborators/\" + collaborator._identity,\n- None,\n- None\n+ self.url + \"/collaborators/\" + collaborator._identity\n )\n return status == 204\n \n@@ -1537,12 +1476,10 @@ def legacy_search_issues(self, state, keyword):\n assert isinstance(keyword, str), keyword\n headers, data = self._requester.requestJsonAndCheck(\n \"GET\",\n- \"/legacy/issues/search/\" + self.owner.login + \"/\" + self.name + \"/\" + state + \"/\" + urllib.quote(keyword),\n- None,\n- None\n+ \"/legacy/issues/search/\" + self.owner.login + \"/\" + self.name + \"/\" + state + \"/\" + urllib.quote(keyword)\n )\n return [\n- github.Issue.Issue(self._requester, github.Legacy.convertIssue(element), completed=False)\n+ github.Issue.Issue(self._requester, headers, github.Legacy.convertIssue(element), completed=False)\n for element in data[\"issues\"]\n ]\n \n@@ -1566,13 +1503,12 @@ def merge(self, base, head, commit_message=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"POST\",\n self.url + \"/merges\",\n- None,\n- post_parameters\n+ input=post_parameters\n )\n if data is None:\n return None\n else:\n- return github.Commit.Commit(self._requester, data, completed=True)\n+ return github.Commit.Commit(self._requester, headers, data, completed=True)\n \n def remove_from_collaborators(self, collaborator):\n \"\"\"\n@@ -1583,9 +1519,7 @@ def remove_from_collaborators(self, collaborator):\n assert isinstance(collaborator, github.NamedUser.NamedUser), collaborator\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/collaborators/\" + collaborator._identity,\n- None,\n- None\n+ self.url + \"/collaborators/\" + collaborator._identity\n )\n \n def subscribe_to_hub(self, event, callback, secret=github.GithubObject.NotSet):\n@@ -1625,8 +1559,7 @@ def _hub(self, mode, event, callback, secret):\n responseHeaders, output = self._requester.requestMultipartAndCheck(\n \"POST\",\n \"/hub\",\n- None,\n- post_parameters,\n+ input=post_parameters\n )\n \n @property\n@@ -1719,16 +1652,16 @@ def _useAttributes(self, attributes):\n self._open_issues = attributes[\"open_issues\"]\n if \"organization\" in attributes: # pragma no branch\n assert attributes[\"organization\"] is None or isinstance(attributes[\"organization\"], dict), attributes[\"organization\"]\n- self._organization = None if attributes[\"organization\"] is None else github.Organization.Organization(self._requester, attributes[\"organization\"], completed=False)\n+ self._organization = None if attributes[\"organization\"] is None else github.Organization.Organization(self._requester, self._headers, attributes[\"organization\"], completed=False)\n if \"owner\" in attributes: # pragma no branch\n assert attributes[\"owner\"] is None or isinstance(attributes[\"owner\"], dict), attributes[\"owner\"]\n- self._owner = None if attributes[\"owner\"] is None else github.NamedUser.NamedUser(self._requester, attributes[\"owner\"], completed=False)\n+ self._owner = None if attributes[\"owner\"] is None else github.NamedUser.NamedUser(self._requester, self._headers, attributes[\"owner\"], completed=False)\n if \"parent\" in attributes: # pragma no branch\n assert attributes[\"parent\"] is None or isinstance(attributes[\"parent\"], dict), attributes[\"parent\"]\n- self._parent = None if attributes[\"parent\"] is None else Repository(self._requester, attributes[\"parent\"], completed=False)\n+ self._parent = None if attributes[\"parent\"] is None else Repository(self._requester, self._headers, attributes[\"parent\"], completed=False)\n if \"permissions\" in attributes: # pragma no branch\n assert attributes[\"permissions\"] is None or isinstance(attributes[\"permissions\"], dict), attributes[\"permissions\"]\n- self._permissions = None if attributes[\"permissions\"] is None else github.Permissions.Permissions(self._requester, attributes[\"permissions\"], completed=False)\n+ self._permissions = None if attributes[\"permissions\"] is None else github.Permissions.Permissions(self._requester, self._headers, attributes[\"permissions\"], completed=False)\n if \"private\" in attributes: # pragma no branch\n assert attributes[\"private\"] is None or isinstance(attributes[\"private\"], bool), attributes[\"private\"]\n self._private = attributes[\"private\"]\n@@ -1740,7 +1673,7 @@ def _useAttributes(self, attributes):\n self._size = attributes[\"size\"]\n if \"source\" in attributes: # pragma no branch\n assert attributes[\"source\"] is None or isinstance(attributes[\"source\"], dict), attributes[\"source\"]\n- self._source = None if attributes[\"source\"] is None else Repository(self._requester, attributes[\"source\"], completed=False)\n+ self._source = None if attributes[\"source\"] is None else Repository(self._requester, self._headers, attributes[\"source\"], completed=False)\n if \"ssh_url\" in attributes: # pragma no branch\n assert attributes[\"ssh_url\"] is None or isinstance(attributes[\"ssh_url\"], str), attributes[\"ssh_url\"]\n self._ssh_url = attributes[\"ssh_url\"]"},{"sha":"69e1c6162f2f414f9679101b3fb29de677f7e72f","filename":"github/RepositoryKey.py","status":"modified","additions":5,"deletions":7,"changes":12,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/RepositoryKey.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/RepositoryKey.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/RepositoryKey.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Srijan Choudhary #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n@@ -33,8 +34,8 @@ class RepositoryKey(github.GithubObject.CompletableGithubObject):\n This class represents RepositoryKeys. The reference can be found here http://developer.github.com/v3/repos/keys/\n \"\"\"\n \n- def __init__(self, requester, attributes, completed, repoUrl):\n- github.GithubObject.CompletableGithubObject.__init__(self, requester, attributes, completed)\n+ def __init__(self, requester, headers, attributes, completed, repoUrl):\n+ github.GithubObject.CompletableGithubObject.__init__(self, requester, headers, attributes, completed)\n self.__repoUrl = repoUrl\n \n @property\n@@ -88,9 +89,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.__customUrl,\n- None,\n- None\n+ self.__customUrl\n )\n \n def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet):\n@@ -110,8 +109,7 @@ def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet)\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.__customUrl,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n "},{"sha":"836b776e42a3080cffc8d5f1e6959fa6414a518c","filename":"github/Requester.py","status":"modified","additions":88,"deletions":18,"changes":106,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Requester.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Requester.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Requester.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -9,6 +9,7 @@\n # Copyright 2012 Steve English #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Ed Jackson #\n # Copyright 2013 Jonathan J Hunt #\n # Copyright 2013 Mark Roddy #\n@@ -37,6 +38,7 @@\n import urllib\n import urlparse\n import sys\n+import Consts\n \n atLeastPython26 = sys.hexversion >= 0x02060000\n atLeastPython3 = sys.hexversion >= 0x03000000\n@@ -63,7 +65,66 @@ def resetConnectionClasses(cls):\n cls.__httpConnectionClass = httplib.HTTPConnection\n cls.__httpsConnectionClass = httplib.HTTPSConnection\n \n+ #############################################################\n+ # For Debug\n+ @classmethod\n+ def setDebugFlag(cls, flag):\n+ cls.DEBUG_FLAG = flag\n+\n+ @classmethod\n+ def setOnCheckMe(cls, onCheckMe):\n+ cls.ON_CHECK_ME = onCheckMe\n+\n+ DEBUG_FLAG = False\n+\n+ DEBUG_FRAME_BUFFER_SIZE = 1024\n+\n+ DEBUG_HEADER_KEY = \"DEBUG_FRAME\"\n+\n+ ON_CHECK_ME = None\n+\n+ def NEW_DEBUG_FRAME(self, requestHeader):\n+ '''\n+ Initialize a debug frame with requestHeader\n+ Frame count is updated and will be attached to respond header\n+ The structure of a frame: [requestHeader, statusCode, responseHeader, raw_data]\n+ Some of them may be None\n+ '''\n+ if self.DEBUG_FLAG: # pragma no branch (Flag always set in tests)\n+ new_frame = [requestHeader, None, None, None]\n+ if self._frameCount < self.DEBUG_FRAME_BUFFER_SIZE - 1: # pragma no branch (Should be covered)\n+ self._frameBuffer.append(new_frame)\n+ else:\n+ self._frameBuffer[0] = new_frame # pragma no cover (Should be covered)\n+\n+ self._frameCount = len(self._frameBuffer) - 1\n+\n+ def DEBUG_ON_RESPONSE(self, statusCode, responseHeader, data):\n+ '''\n+ Update current frame with response\n+ Current frame index will be attached to responseHeader\n+ '''\n+ if self.DEBUG_FLAG: # pragma no branch (Flag always set in tests)\n+ self._frameBuffer[self._frameCount][1:4] = [statusCode, responseHeader, data]\n+ responseHeader[self.DEBUG_HEADER_KEY] = self._frameCount\n+\n+ def check_me(self, obj):\n+ if self.DEBUG_FLAG and self.ON_CHECK_ME is not None: # pragma no branch (Flag always set in tests)\n+ frame = None\n+ if self.DEBUG_HEADER_KEY in obj._headers:\n+ frame_index = obj._headers[self.DEBUG_HEADER_KEY]\n+ frame = self._frameBuffer[frame_index]\n+ self.ON_CHECK_ME(obj, frame)\n+\n+ def _initializeDebugFeature(self):\n+ self._frameCount = 0\n+ self._frameBuffer = []\n+\n+ #############################################################\n+\n def __init__(self, login_or_token, password, base_url, timeout, client_id, client_secret, user_agent, per_page):\n+ self._initializeDebugFeature()\n+\n if password is not None:\n login = login_or_token\n if atLeastPython3:\n@@ -103,11 +164,11 @@ def __init__(self, login_or_token, password, base_url, timeout, client_id, clien\n 'See http://developer.github.com/v3/#user-agent-required'\n self.__userAgent = user_agent\n \n- def requestJsonAndCheck(self, verb, url, parameters, input):\n- return self.__check(*self.requestJson(verb, url, parameters, input))\n+ def requestJsonAndCheck(self, verb, url, parameters=None, headers=None, input=None, cnx=None):\n+ return self.__check(*self.requestJson(verb, url, parameters, headers, input, cnx))\n \n- def requestMultipartAndCheck(self, verb, url, parameters, input):\n- return self.__check(*self.requestMultipart(verb, url, parameters, input))\n+ def requestMultipartAndCheck(self, verb, url, parameters=None, headers=None, input=None):\n+ return self.__check(*self.requestMultipart(verb, url, parameters, headers, input))\n \n def __check(self, status, responseHeaders, output):\n output = self.__structuredFromJson(output)\n@@ -116,13 +177,13 @@ def __check(self, status, responseHeaders, output):\n return responseHeaders, output\n \n def __createException(self, status, output):\n- if status == 401 and output[\"message\"] == \"Bad credentials\":\n+ if status == 401 and output.get(\"message\") == \"Bad credentials\":\n cls = GithubException.BadCredentialsException\n- elif status == 403 and output[\"message\"].startswith(\"Missing or invalid User Agent string\"):\n+ elif status == 403 and output.get(\"message\").startswith(\"Missing or invalid User Agent string\"):\n cls = GithubException.BadUserAgentException\n- elif status == 403 and output[\"message\"].startswith(\"API Rate Limit Exceeded\"):\n+ elif status == 403 and output.get(\"message\").startswith(\"API Rate Limit Exceeded\"):\n cls = GithubException.RateLimitExceededException\n- elif status == 404 and output[\"message\"] == \"Not Found\":\n+ elif status == 404 and output.get(\"message\") == \"Not Found\":\n cls = GithubException.UnknownObjectException\n else:\n cls = GithubException.GithubException\n@@ -139,13 +200,13 @@ def __structuredFromJson(self, data):\n except ValueError, e:\n return {'data': data}\n \n- def requestJson(self, verb, url, parameters, input):\n+ def requestJson(self, verb, url, parameters=None, headers=None, input=None, cnx=None):\n def encode(input):\n return \"application/json\", json.dumps(input)\n \n- return self.__requestEncode(verb, url, parameters, input, encode)\n+ return self.__requestEncode(cnx, verb, url, parameters, headers, input, encode)\n \n- def requestMultipart(self, verb, url, parameters, input):\n+ def requestMultipart(self, verb, url, parameters=None, headers=None, input=None):\n def encode(input):\n boundary = \"----------------------------3c3ba8b523b2\"\n eol = \"\\r\\n\"\n@@ -159,14 +220,15 @@ def encode(input):\n encoded_input += \"--\" + boundary + \"--\" + eol\n return \"multipart/form-data; boundary=\" + boundary, encoded_input\n \n- return self.__requestEncode(verb, url, parameters, input, encode)\n+ return self.__requestEncode(None, verb, url, parameters, headers, input, encode)\n \n- def __requestEncode(self, verb, url, parameters, input, encode):\n+ def __requestEncode(self, cnx, verb, url, parameters, requestHeaders, input, encode):\n assert verb in [\"HEAD\", \"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\"]\n if parameters is None:\n parameters = dict()\n+ if requestHeaders is None:\n+ requestHeaders = dict()\n \n- requestHeaders = dict()\n self.__authenticate(url, requestHeaders, parameters)\n requestHeaders[\"User-Agent\"] = self.__userAgent\n \n@@ -177,7 +239,9 @@ def __requestEncode(self, verb, url, parameters, input, encode):\n if input is not None:\n requestHeaders[\"Content-Type\"], encoded_input = encode(input)\n \n- status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)\n+ self.NEW_DEBUG_FRAME(requestHeaders)\n+\n+ status, responseHeaders, output = self.__requestRaw(cnx, verb, url, requestHeaders, encoded_input)\n \n if \"x-ratelimit-remaining\" in responseHeaders and \"x-ratelimit-limit\" in responseHeaders:\n self.rate_limiting = (int(responseHeaders[\"x-ratelimit-remaining\"]), int(responseHeaders[\"x-ratelimit-limit\"]))\n@@ -187,10 +251,16 @@ def __requestEncode(self, verb, url, parameters, input, encode):\n if \"x-oauth-scopes\" in responseHeaders:\n self.oauth_scopes = responseHeaders[\"x-oauth-scopes\"].split(\", \")\n \n+ self.DEBUG_ON_RESPONSE(status, responseHeaders, output)\n+\n return status, responseHeaders, output\n \n- def __requestRaw(self, verb, url, requestHeaders, input):\n- cnx = self.__createConnection()\n+ def __requestRaw(self, cnx, verb, url, requestHeaders, input):\n+ if cnx is None:\n+ cnx = self.__createConnection()\n+ else:\n+ assert cnx == \"status\"\n+ cnx = self.__httpsConnectionClass(\"status.github.com\", 443)\n cnx.request(\n verb,\n url,\n@@ -244,7 +314,7 @@ def __createConnection(self):\n kwds[\"strict\"] = True # Useless in Python3, would generate a deprecation warning\n if atLeastPython26: # pragma no branch (Branch useful only with Python 2.5)\n kwds[\"timeout\"] = self.__timeout # Did not exist before Python2.6\n- return self.__connectionClass(host=self.__hostname, port=self.__port, **kwds)\n+ return self.__connectionClass(self.__hostname, self.__port, **kwds)\n \n def __log(self, verb, url, requestHeaders, input, status, responseHeaders, output):\n logger = logging.getLogger(__name__)"},{"sha":"6c117241297b8cc312ef45fa6240453e35ca36ed","filename":"github/Status.py","status":"added","additions":56,"deletions":0,"changes":56,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Status.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Status.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Status.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,56 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+import github.GithubObject\n+\n+\n+class Status(github.GithubObject.NonCompletableGithubObject):\n+ \"\"\"\n+ This class represents status as defined in https://status.github.com/api\n+ \"\"\"\n+\n+ @property\n+ def status(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ return self._NoneIfNotSet(self._status)\n+\n+ @property\n+ def last_updated(self):\n+ \"\"\"\n+ :type: datetime.datetime\n+ \"\"\"\n+ return self._NoneIfNotSet(self._last_updated)\n+\n+ def _initAttributes(self):\n+ self._status = github.GithubObject.NotSet\n+ self._last_updated = github.GithubObject.NotSet\n+\n+ def _useAttributes(self, attributes):\n+ if \"status\" in attributes: # pragma no branch\n+ assert attributes[\"status\"] is None or isinstance(attributes[\"status\"], str), attributes[\"status\"]\n+ self._status = attributes[\"status\"]\n+ if \"last_updated\" in attributes: # pragma no branch\n+ assert attributes[\"last_updated\"] is None or isinstance(attributes[\"last_updated\"], str), attributes[\"last_updated\"]\n+ self._last_updated = self._parseDatetime(attributes[\"last_updated\"])"},{"sha":"266e1b05cc4f1b1298b6f56eae34e58ad9be871e","filename":"github/StatusMessage.py","status":"added","additions":66,"deletions":0,"changes":66,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/StatusMessage.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/StatusMessage.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/StatusMessage.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,66 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+import github.GithubObject\n+\n+\n+class StatusMessage(github.GithubObject.NonCompletableGithubObject):\n+ \"\"\"\n+ This class represents status messages as defined in https://status.github.com/api\n+ \"\"\"\n+\n+ @property\n+ def body(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ return self._NoneIfNotSet(self._body)\n+\n+ @property\n+ def status(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ return self._NoneIfNotSet(self._status)\n+\n+ @property\n+ def created_on(self):\n+ \"\"\"\n+ :type: datetime.datetime\n+ \"\"\"\n+ return self._NoneIfNotSet(self._created_on)\n+\n+ def _initAttributes(self):\n+ self._status = github.GithubObject.NotSet\n+ self._created_on = github.GithubObject.NotSet\n+\n+ def _useAttributes(self, attributes):\n+ if \"body\" in attributes: # pragma no branch\n+ assert attributes[\"body\"] is None or isinstance(attributes[\"body\"], str), attributes[\"body\"]\n+ self._body = attributes[\"body\"]\n+ if \"status\" in attributes: # pragma no branch\n+ assert attributes[\"status\"] is None or isinstance(attributes[\"status\"], str), attributes[\"status\"]\n+ self._status = attributes[\"status\"]\n+ if \"created_on\" in attributes: # pragma no branch\n+ assert attributes[\"created_on\"] is None or isinstance(attributes[\"created_on\"], str), attributes[\"created_on\"]\n+ self._created_on = self._parseDatetime(attributes[\"created_on\"])"},{"sha":"890c1a02366be9fd71e36b90084c7dbd624eb2c0","filename":"github/Tag.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Tag.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Tag.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Tag.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -71,7 +72,7 @@ def _initAttributes(self):\n def _useAttributes(self, attributes):\n if \"commit\" in attributes: # pragma no branch\n assert attributes[\"commit\"] is None or isinstance(attributes[\"commit\"], dict), attributes[\"commit\"]\n- self._commit = None if attributes[\"commit\"] is None else github.Commit.Commit(self._requester, attributes[\"commit\"], completed=False)\n+ self._commit = None if attributes[\"commit\"] is None else github.Commit.Commit(self._requester, self._headers, attributes[\"commit\"], completed=False)\n if \"name\" in attributes: # pragma no branch\n assert attributes[\"name\"] is None or isinstance(attributes[\"name\"], str), attributes[\"name\"]\n self._name = attributes[\"name\"]"},{"sha":"9b687d8027104bcccf49f6b23d129b94cd963eec","filename":"github/Team.py","status":"modified","additions":9,"deletions":23,"changes":32,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/Team.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/Team.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/Team.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -93,9 +94,7 @@ def add_to_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n \n def add_to_repos(self, repo):\n@@ -107,9 +106,7 @@ def add_to_repos(self, repo):\n assert isinstance(repo, github.Repository.Repository), repo\n headers, data = self._requester.requestJsonAndCheck(\n \"PUT\",\n- self.url + \"/repos/\" + repo._identity,\n- None,\n- None\n+ self.url + \"/repos/\" + repo._identity\n )\n \n def delete(self):\n@@ -119,9 +116,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, name, permission=github.GithubObject.NotSet):\n@@ -141,8 +136,7 @@ def edit(self, name, permission=github.GithubObject.NotSet):\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n \n@@ -179,9 +173,7 @@ def has_in_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n return status == 204\n \n@@ -194,9 +186,7 @@ def has_in_repos(self, repo):\n assert isinstance(repo, github.Repository.Repository), repo\n status, headers, data = self._requester.requestJson(\n \"GET\",\n- self.url + \"/repos/\" + repo._identity,\n- None,\n- None\n+ self.url + \"/repos/\" + repo._identity\n )\n return status == 204\n \n@@ -209,9 +199,7 @@ def remove_from_members(self, member):\n assert isinstance(member, github.NamedUser.NamedUser), member\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/members/\" + member._identity,\n- None,\n- None\n+ self.url + \"/members/\" + member._identity\n )\n \n def remove_from_repos(self, repo):\n@@ -223,9 +211,7 @@ def remove_from_repos(self, repo):\n assert isinstance(repo, github.Repository.Repository), repo\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url + \"/repos/\" + repo._identity,\n- None,\n- None\n+ self.url + \"/repos/\" + repo._identity\n )\n \n @property"},{"sha":"9ca0133be4c77ff5720473de5618c97312d6d7e5","filename":"github/UserKey.py","status":"modified","additions":3,"deletions":5,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/UserKey.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/UserKey.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/UserKey.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # Copyright 2013 martinqt #\n # #\n@@ -79,9 +80,7 @@ def delete(self):\n \"\"\"\n headers, data = self._requester.requestJsonAndCheck(\n \"DELETE\",\n- self.url,\n- None,\n- None\n+ self.url\n )\n \n def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet):\n@@ -101,8 +100,7 @@ def edit(self, title=github.GithubObject.NotSet, key=github.GithubObject.NotSet)\n headers, data = self._requester.requestJsonAndCheck(\n \"PATCH\",\n self.url,\n- None,\n- post_parameters\n+ input=post_parameters\n )\n self._useAttributes(data)\n "},{"sha":"4ddefece6ae21f29c76934cbd1ed7f122907ec1e","filename":"github/tests/AllTests.py","status":"modified","additions":4,"deletions":0,"changes":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/AllTests.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/AllTests.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/AllTests.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -56,6 +56,7 @@\n from RateLimiting import *\n from Repository import *\n from RepositoryKey import *\n+from Status import *\n from Tag import *\n from Team import *\n from UserKey import *\n@@ -79,3 +80,6 @@\n # from Issue142 import * # Deactivated for Travis-CI because Github has lowered the rate limitations\n from Issue158 import *\n from Issue174 import *\n+\n+from ConditionalRequestUpdate import ConditionalRequestUpdate\n+from Persistence import Persistence"},{"sha":"bfd3f87df527126bffa6c10c78cbb7d790e54542","filename":"github/tests/ConditionalRequestUpdate.py","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ConditionalRequestUpdate.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ConditionalRequestUpdate.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ConditionalRequestUpdate.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,43 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 AKFish #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+# #193: Line endings should be linux style\n+\n+import Framework\n+import github\n+\n+\n+class ConditionalRequestUpdate(Framework.TestCase):\n+ def setUp(self):\n+ Framework.TestCase.setUp(self)\n+ self.repo = self.g.get_repo(\"akfish/PyGithub\")\n+\n+ def testDidNotUpdate(self):\n+ self.assertFalse(self.repo.update(), msg=\"The repo is not changes. But update() != False\")\n+\n+ def testDidUpdate(self):\n+ self.assertTrue(self.repo.update(), msg=\"The repo should be changed by now. But update() != True\")\n+\n+ def testUpdateObjectWithoutEtag(self):\n+ r = self.g.get_repo(\"jacquev6/PyGithub\")\n+ self.assertTrue(r.update())"},{"sha":"24e814b49afae222e8ac8a79ee5696166a76abc1","filename":"github/tests/Framework.py","status":"modified","additions":17,"deletions":0,"changes":17,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Framework.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Framework.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Framework.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -4,6 +4,7 @@\n # #\n # Copyright 2012 Vincent Jacques #\n # Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n # Copyright 2013 Vincent Jacques #\n # #\n # This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n@@ -244,8 +245,24 @@ def assertListKeyBegin(self, elements, key, expectedKeys):\n \n \n class TestCase(BasicTestCase):\n+ def doCheckFrame(self, obj, frame):\n+ if obj._headers == {} and frame is None:\n+ return\n+ if obj._headers is None and frame == {}:\n+ return\n+ self.assertEqual(obj._headers, frame[2])\n+\n+ def getFrameChecker(self):\n+ return lambda requester, obj, frame: self.doCheckFrame(obj, frame)\n+\n def setUp(self):\n BasicTestCase.setUp(self)\n+\n+ # Set up frame debugging\n+ github.GithubObject.GithubObject.setCheckAfterInitFlag(True)\n+ github.Requester.Requester.setDebugFlag(True)\n+ github.Requester.Requester.setOnCheckMe(self.getFrameChecker())\n+\n self.g = github.Github(self.login, self.password)\n \n "},{"sha":"d74dbac39717bba9476ca39070f6f0beced70578","filename":"github/tests/Gist.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Gist.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Gist.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Gist.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -108,12 +108,12 @@ def testStarring(self):\n self.assertFalse(self.gist.is_starred())\n \n def testFork(self):\n- gist = self.g.get_gist(\"2729818\") # Random gist\n+ gist = self.g.get_gist(\"6296553\") # Random gist\n myGist = gist.create_fork()\n- self.assertEqual(myGist.id, \"2729865\")\n+ self.assertEqual(myGist.id, \"6296732\")\n self.assertEqual(myGist.fork_of, None) # WTF\n- sameGist = self.g.get_gist(\"2729865\")\n- self.assertEqual(sameGist.fork_of.id, \"2729818\")\n+ sameGist = self.g.get_gist(\"6296732\")\n+ self.assertEqual(sameGist.fork_of.id, \"6296553\")\n \n def testDelete(self):\n self.gist.delete()"},{"sha":"dec6a80595e541d50720527d16f752d44ef4acf3","filename":"github/tests/Github_.py","status":"modified","additions":6,"deletions":0,"changes":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Github_.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Github_.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Github_.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -128,3 +128,9 @@ def testGetUsers(self):\n \n def testGetUsersSince(self):\n self.assertListKeyBegin(self.g.get_users(since=1000), lambda u: u.login, [\"sbecker\"])\n+\n+ def testGetRepos(self):\n+ self.assertListKeyBegin(self.g.get_repos(), lambda r: r.name, [\"grit\", \"merb-core\", \"rubinius\", \"god\", \"jsawesome\", \"jspec\", \"exception_logger\", \"ambition\"])\n+\n+ def testGetReposSince(self):\n+ self.assertListKeyBegin(self.g.get_repos(since=1000), lambda r: r.name, [\"jquery-humanize-messages-plugin\", \"4slicer\", \"fixture-scenarios\", \"mongrel_proctitle\", \"rails-plugins\"])"},{"sha":"5a56bd195039b7f2077fa19952af9bcb5f6c95d1","filename":"github/tests/NamedUser.py","status":"modified","additions":4,"deletions":0,"changes":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/NamedUser.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/NamedUser.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/NamedUser.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -109,6 +109,10 @@ def testGetFollowers(self):\n def testGetFollowing(self):\n self.assertListKeyEqual(self.user.get_following(), lambda f: f.login, [\"nvie\", \"schacon\", \"jamis\", \"chad\", \"unclebob\", \"dabrahams\", \"jnorthrup\", \"brugidou\", \"regisb\", \"walidk\", \"tanzilli\", \"fjardon\", \"r3c\", \"sdanzan\", \"vineus\", \"cjuniet\", \"gturri\", \"ant9000\", \"asquini\", \"claudyus\", \"jardon-u\", \"s-bernard\", \"kamaradclimber\", \"Lyloa\"])\n \n+ def testHasInFollowing(self):\n+ nvie = self.g.get_user(\"nvie\")\n+ self.assertTrue(self.user.has_in_following(nvie))\n+\n def testGetOrgs(self):\n self.assertListKeyEqual(self.user.get_orgs(), lambda o: o.login, [\"BeaverSoftware\"])\n "},{"sha":"300e91744c7c62d950b6e5eb91ea8e697b3f570b","filename":"github/tests/Persistence.py","status":"added","additions":55,"deletions":0,"changes":55,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Persistence.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Persistence.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Persistence.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,55 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+import Framework\n+import github\n+\n+if Framework.atLeastPython26:\n+ from io import BytesIO as IO\n+else:\n+ from StringIO import StringIO as IO\n+\n+\n+class Persistence(Framework.TestCase):\n+ def setUp(self):\n+ Framework.TestCase.setUp(self)\n+ self.repo = self.g.get_repo(\"akfish/PyGithub\")\n+\n+ self.dumpedRepo = IO()\n+ self.g.dump(self.repo, self.dumpedRepo)\n+ self.dumpedRepo.seek(0)\n+\n+ def tearDown(self):\n+ self.dumpedRepo.close()\n+\n+ def testLoad(self):\n+ loadedRepo = self.g.load(self.dumpedRepo)\n+ self.assertTrue(isinstance(loadedRepo, github.Repository.Repository))\n+ self.assertTrue(loadedRepo._requester is self.repo._requester)\n+ self.assertTrue(loadedRepo.owner._requester is self.repo._requester)\n+ self.assertEqual(loadedRepo.name, \"PyGithub\")\n+ self.assertEqual(loadedRepo.url, \"https://api.github.com/repos/akfish/PyGithub\")\n+\n+ def testLoadAndUpdate(self):\n+ loadedRepo = self.g.load(self.dumpedRepo)\n+ self.assertTrue(loadedRepo.update())"},{"sha":"dfc62ba258a155c9b40432ec67a51b8b8822ec73","filename":"github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '13698'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:09:11 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"8600bedcb7fed1d8065e1693e05529ce\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:13:08 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377140429')]\n+{\"id\":12156762,\"name\":\"PyGithub\",\"full_name\":\"akfish/PyGithub\",\"owner\":{\"login\":\"akfish\",\"id\":922715,\"avatar_url\":\"https://1.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png\",\"gravatar_id\":\"12a1b44d4e5c19cee59618084602b112\",\"url\":\"https://api.github.com/users/akfish\",\"html_url\":\"https://github.com/akfish\",\"followers_url\":\"https://api.github.com/users/akfish/followers\",\"following_url\":\"https://api.github.com/users/akfish/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/akfish/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/akfish/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/akfish/subscriptions\",\"organizations_url\":\"https://api.github.com/users/akfish/orgs\",\"repos_url\":\"https://api.github.com/users/akfish/repos\",\"events_url\":\"https://api.github.com/users/akfish/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/akfish/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/akfish/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":true,\"url\":\"https://api.github.com/repos/akfish/PyGithub\",\"forks_url\":\"https://api.github.com/repos/akfish/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/akfish/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/akfish/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/akfish/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/akfish/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/akfish/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/akfish/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/akfish/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/akfish/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/akfish/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/akfish/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/akfish/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/akfish/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/akfish/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/akfish/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/akfish/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/akfish/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/akfish/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/akfish/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/akfish/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/akfish/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/akfish/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/akfish/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/akfish/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/akfish/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/akfish/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/akfish/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/akfish/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/akfish/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/akfish/PyGithub/labels{/name}\",\"created_at\":\"2013-08-16T10:56:11Z\",\"updated_at\":\"2013-08-22T02:09:11Z\",\"pushed_at\":\"2013-08-22T02:09:09Z\",\"git_url\":\"git://github.com/akfish/PyGithub.git\",\"ssh_url\":\"git@github.com:akfish/PyGithub.git\",\"clone_url\":\"https://github.com/akfish/PyGithub.git\",\"svn_url\":\"https://github.com/akfish/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":6736,\"watchers_count\":0,\"language\":\"Python\",\"has_issues\":false,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":0,\"mirror_url\":null,\"open_issues_count\":0,\"forks\":0,\"open_issues\":0,\"watchers\":0,\"master_branch\":\"master\",\"default_branch\":\"master\",\"permissions\":{\"admin\":true,\"push\":true,\"pull\":true},\"network_count\":70,\"parent\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"},\"source\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"}}\n+"},{"sha":"025aee8c0f6dea08b255b2229fd018af435b9d2a","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'If-None-Match': '\"8600bedcb7fed1d8065e1693e05529ce\"', 'User-Agent': 'PyGithub/Python', 'Authorization': 'Basic login_and_password_removed', 'If-Modified-Since': 'Thu, 22 Aug 2013 02:09:11 GMT'}\n+null\n+304\n+[('status', '304 Not Modified'), ('x-ratelimit-remaining', '4988'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept-Encoding'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:09:11 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"8600bedcb7fed1d8065e1693e05529ce\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:13:10 GMT'), ('access-control-allow-origin', '*'), ('x-ratelimit-reset', '1377140429')]\n+\n+"},{"sha":"b6d8aeec9b3c663cfe561eb2513a514f10011673","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'If-None-Match': '\"8600bedcb7fed1d8065e1693e05529ce\"', 'User-Agent': 'PyGithub/Python', 'Authorization': 'Basic login_and_password_removed', 'If-Modified-Since': 'Thu, 22 Aug 2013 02:09:11 GMT'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '13712'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:14:54 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"ef281ef0e821c18f80da36902727160b\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:15:01 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377140429')]\n+{\"id\":12156762,\"name\":\"PyGithub\",\"full_name\":\"akfish/PyGithub\",\"owner\":{\"login\":\"akfish\",\"id\":922715,\"avatar_url\":\"https://0.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png\",\"gravatar_id\":\"12a1b44d4e5c19cee59618084602b112\",\"url\":\"https://api.github.com/users/akfish\",\"html_url\":\"https://github.com/akfish\",\"followers_url\":\"https://api.github.com/users/akfish/followers\",\"following_url\":\"https://api.github.com/users/akfish/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/akfish/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/akfish/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/akfish/subscriptions\",\"organizations_url\":\"https://api.github.com/users/akfish/orgs\",\"repos_url\":\"https://api.github.com/users/akfish/repos\",\"events_url\":\"https://api.github.com/users/akfish/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/akfish/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/akfish/PyGithub\",\"description\":\"Python library implementing the full Github API v3 - AKFish Fork\",\"fork\":true,\"url\":\"https://api.github.com/repos/akfish/PyGithub\",\"forks_url\":\"https://api.github.com/repos/akfish/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/akfish/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/akfish/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/akfish/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/akfish/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/akfish/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/akfish/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/akfish/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/akfish/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/akfish/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/akfish/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/akfish/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/akfish/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/akfish/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/akfish/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/akfish/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/akfish/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/akfish/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/akfish/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/akfish/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/akfish/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/akfish/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/akfish/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/akfish/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/akfish/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/akfish/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/akfish/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/akfish/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/akfish/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/akfish/PyGithub/labels{/name}\",\"created_at\":\"2013-08-16T10:56:11Z\",\"updated_at\":\"2013-08-22T02:14:54Z\",\"pushed_at\":\"2013-08-22T02:09:09Z\",\"git_url\":\"git://github.com/akfish/PyGithub.git\",\"ssh_url\":\"git@github.com:akfish/PyGithub.git\",\"clone_url\":\"https://github.com/akfish/PyGithub.git\",\"svn_url\":\"https://github.com/akfish/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":6736,\"watchers_count\":0,\"language\":\"Python\",\"has_issues\":false,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":0,\"mirror_url\":null,\"open_issues_count\":0,\"forks\":0,\"open_issues\":0,\"watchers\":0,\"master_branch\":\"master\",\"default_branch\":\"master\",\"permissions\":{\"admin\":true,\"push\":true,\"pull\":true},\"network_count\":70,\"parent\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"},\"source\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"}}\n+"},{"sha":"6ef154b5c89fc41728599711ada9ac0aa8d36959","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testUpdateObjectWithoutEtag.txt","status":"added","additions":22,"deletions":0,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testUpdateObjectWithoutEtag.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/ConditionalRequestUpdate.testUpdateObjectWithoutEtag.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/ConditionalRequestUpdate.testUpdateObjectWithoutEtag.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,22 @@\n+https\r\n+GET\r\n+api.github.com\r\n+None\r\n+/repos/jacquev6/PyGithub\r\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\r\n+null\r\n+200\r\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4911'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('date', 'Sun, 27 May 2012 07:17:09 GMT'), ('content-type', 'application/json; charset=utf-8')]\r\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"updated_at\":\"2012-05-27T06:55:28Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\r\n+\r\n+https\r\n+GET\r\n+api.github.com\r\n+None\r\n+/repos/jacquev6/PyGithub\r\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\r\n+null\r\n+200\r\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4911'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('date', 'Sun, 27 May 2012 07:17:09 GMT'), ('content-type', 'application/json; charset=utf-8')]\r\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"updated_at\":\"2012-05-27T06:55:28Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\r\n+\r"},{"sha":"0589aa6c8958061fa31f388fd9d737750bdac50a","filename":"github/tests/ReplayData/Gist.testFork.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Gist.testFork.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Gist.testFork.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Gist.testFork.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,32 +2,32 @@ https\n GET\n api.github.com\n None\n-/gists/2729818\n+/gists/6296553\n {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4970'), ('content-length', '2576'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fda4eb92e9b9a245bccf9efd47857766\"'), ('date', 'Sat, 19 May 2012 07:25:30 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"git_push_url\":\"git@gist.github.com:2729818.git\",\"updated_at\":\"2012-05-19T07:06:08Z\",\"forks\":[],\"url\":\"https://api.github.com/gists/2729818\",\"comments\":0,\"public\":true,\"files\":{\"ror.markdown\":{\"type\":\"text/plain\",\"raw_url\":\"https://gist.github.com/raw/2729818/1284e70f4c16550ef32a26aa4f5f0c78edaa7008/ror.markdown\",\"size\":1076,\"filename\":\"ror.markdown\",\"content\":\"## create user\\n\\nsudo useradd -m username\\nvisudo\\n\\n## delete default user\\n\\nsudo userdel ubuntu\\nsudo rm -Rf ubuntu\\n\\n## setup ssh\\n\\nmkdir ~/.ssh\\nvi /etc/ssh/authorized_keys\\nsudo vi /etc/ssh/sshd_config\\n\\n\\n## install packages\\n\\nsudo apt-get update\\n\\nsudo apt-get install sysv-rc-init git-core apache2-utils wget vim\\nsudo apt-get install mysql-client mysql-server libmysqld-dev\\nsudo apt-get install g++ openssl zlib1g readline-common libyaml-dev libssl-dev zlib1g-dev libxml2-dev libxslt1-dev libjson0-dev libgcc1 libreadline-dev\\n\\n\\n## install nginx\\n\\nwget http://nginx.org/keys/nginx_signing.key\\nsudo apt-key add nginx_signing.key\\n\\n### add /etc/sources.list\\n> \\\"deb http://nginx.org/packages/ubuntu/ lucid nginx\\ndeb-src http://nginx.org/packages/ubuntu/ lucid nginx\\\"\\n\\napt-get update\\napt-get install nginx\\n\\n\\n## setup system\\n\\nsudo sysv-rc-init\\n\\n\\n## install ruby\\n\\ncd /usr/local/src\\nsudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz\\nsudo tar zxvf ruby-1.9.3-p194.tar.gz\\ncd ruby-1.9.3-p194\\nsudo ./configure\\nsudo make && make install\\n\\n\\n## install RoR\\n\\nsudo gem install rails\",\"language\":\"Markdown\"}},\"html_url\":\"https://gist.github.com/2729818\",\"user\":{\"url\":\"https://api.github.com/users/Kechol\",\"gravatar_id\":\"f2a6400b393749ccd9ad3f24d4995f77\",\"login\":\"Kechol\",\"avatar_url\":\"https://secure.gravatar.com/avatar/f2a6400b393749ccd9ad3f24d4995f77?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"id\":625489},\"description\":\"RoR setup in AWS EC2(Ubuntu 12.04 LTS)\",\"created_at\":\"2012-05-19T07:06:08Z\",\"git_pull_url\":\"git://gist.github.com/2729818.git\",\"id\":\"2729818\",\"history\":[{\"url\":\"https://api.github.com/gists/2729818/a655d19a12233e5e5615deb714eae95c433eed57\",\"version\":\"a655d19a12233e5e5615deb714eae95c433eed57\",\"change_status\":{\"deletions\":0,\"additions\":57,\"total\":57},\"committed_at\":\"2012-05-19T07:06:08Z\",\"user\":{\"url\":\"https://api.github.com/users/Kechol\",\"gravatar_id\":\"f2a6400b393749ccd9ad3f24d4995f77\",\"login\":\"Kechol\",\"avatar_url\":\"https://secure.gravatar.com/avatar/f2a6400b393749ccd9ad3f24d4995f77?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"id\":625489}}]}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4966'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '25285'), ('server', 'GitHub.com'), ('last-modified', 'Wed, 21 Aug 2013 16:26:50 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"b96b3895f5da8f5e9533f0db72748a49\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Wed, 21 Aug 2013 16:28:20 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377104997')]\n+{\"url\":\"https://api.github.com/gists/6296553\",\"forks_url\":\"https://api.github.com/gists/6296553/forks\",\"commits_url\":\"https://api.github.com/gists/6296553/commits\",\"id\":\"6296553\",\"git_pull_url\":\"https://gist.github.com/6296553.git\",\"git_push_url\":\"https://gist.github.com/6296553.git\",\"html_url\":\"https://gist.github.com/6296553\",\"files\":{\"GithubAPI.lua\":{\"filename\":\"GithubAPI.lua\",\"type\":\"text/plain\",\"language\":\"Lua\",\"raw_url\":\"https://gist.github.com/raw/6296553/88aafa25fb28e17013054a117354a37f0d78963c/GithubAPI.lua\",\"size\":21229,\"content\":\"-- GithubAPI\\n-- @Author : Hyro Vitaly Protago\\n-- @Version : 1.0.0\\n\\n--[[\\n\\nINFOS :\\n - Cannot delete an anonymous gist\\n]]--\\n\\nGithubAPI = {\\n\\tlocation = \\\"https://api.github.com/\\\",\\n\\ttoken = nil,\\n\\tOAuth = {\\n\\t\\tauthorizations = {}\\n\\t},\\n\\tgist = {\\n\\t\\tlist = {},\\n\\t\\tcomment = {}\\n\\t},\\n\\tgithub = {}\\n}\\n\\n----------------------------------------------------------------------------\\n------------------------------ Github API ----------------------------------\\n----------------------------------------------------------------------------\\n\\n--- Authentication ---\\n\\n--[[ Scopes --\\n\\nScopes let you specify exactly what type of access you need. Scopes limit access for OAuth tokens.\\nThey do not grant any additional permission beyond that which the user already has.\\n\\nFor the web flow, requested scopes will be displayed to the user on the authorize form.\\n\\nCheck headers to see what OAuth scopes you have, and what the API action accepts.\\n\\n~~~\\n$ curl -H \\\"Authorization: token OAUTH-TOKEN\\\" https://api.github.com/users/technoweenie -I\\nHTTP/1.1 200 OK\\nX-OAuth-Scopes: repo, user\\nX-Accepted-OAuth-Scopes: user\\nX-OAuth-Scopes lists the scopes your token has authorized. X-Accepted-OAuth-Scopes lists the scopes that the action checks for.\\n~~~\\n\\n- (no scope)\\npublic read-only access (includes public user profile info, public repo info, and gists).\\n- user\\nRead/write access to profile info only. Note: this scope includes user:email and user:follow.\\n- user:email\\nRead access to a user’s email addresses.\\n- user:follow\\nAccess to follow or unfollow other users.\\n- public_repo\\nRead/write access to public repos and organizations.\\n- repo\\nRead/write access to public and private repos and organizations.\\n- repo:status\\nRead/write access to public and private repository commit statuses.\\nThis scope is only necessary to grant other users or services access to private repository commit statuses without granting access to the code.\\nThe repo and public_repo scopes already include access to commit status for private and public repositories respectively.\\n- delete_repo\\nDelete access to adminable repositories.\\n- notifications\\nRead access to a user’s notifications. repo is accepted too.\\n- gist\\nWrite access to gists.\\n\\nNOTE: Your application can request the scopes in the initial redirection. You can specify multiple scopes by separating them by a comma.\\n~~~\\nhttps://github.com/login/oauth/authorize?\\n client_id=...&\\n scope=user,public_repo\\n~~~\\n]]--\\n\\n-- Redirect users to request GitHub access --\\nfunction GithubAPI.OAuth.getToken(client_id, scope, callback)\\n\\tGithubAPI.http_request(\\\"https://github.com/login/oauth/authorize?client_id=\\\"..client_id..\\\"&scope=\\\"..scope, function(data, status, headers)\\n\\t\\tGithubAPI.OAuth._getToken(client_id, client_secret, data, callback)\\n\\tend, nil, true)\\nend\\n-- GitHub redirects back to your site --\\nfunction GithubAPI.OAuth._getToken(client_id, client_secret, code, callback)\\n\\tGithubAPI.http_request(\\\"https://github.com/login/oauth/access_token\\\", callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tclient_id = client_id,\\n\\t\\t\\tclient_secret = client_secret,\\n\\t\\t\\tcode = code\\n\\t\\t}\\n\\t}, true)\\nend\\n\\n-- List your authorizations --\\nfunction GithubAPI.OAuth.authorizations.list(callback)\\n\\tGithubAPI.http_request(\\\"authorizations\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nLink: ; rel=\\\"next\\\",\\n ; rel=\\\"last\\\"\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single authorization --\\nfunction GithubAPI.OAuth.authorizations.get(id, callback)\\n\\tGithubAPI.http_request(\\\"authorizations/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n}\\n]]--\\n\\n-- Create a new authorization --\\nfunction GithubAPI.OAuth.authorizations.create(callback, scopes, note, note_url, client_id, client_secret)\\n\\tGithubAPI.http_request(\\\"authorizations/\\\", callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tscopes = scopes,\\n\\t\\t\\tnote = note,\\n\\t\\t\\tnote_url = note_url,\\n\\t\\t\\tclient_id = client_id,\\n\\t\\t\\tclient_secret = client_secret\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\nscopes\\nOptional array - A list of scopes that this authorization is in.\\n\\nnote\\nOptional string - A note to remind you what the OAuth token is for.\\n\\nnote_url\\nOptional string - A URL to remind you what app the OAuth token is for.\\n\\nclient_id\\nOptional String - The 20 character OAuth app client key for which to create the token.\\n\\nclient_secret\\nOptional String - The 40 character OAuth app client secret for which to create the token.\\n~~~\\n{\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"note\\\": \\\"admin script\\\"\\n}\\n~~~\\n]]--\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/authorizations/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n}\\n]]--\\n\\n-- TODO\\n-- Update\\n-- Check\\n-- Delete\\n\\n--- GISTS ---\\n\\n-- List gists --\\nfunction GithubAPI.gist.list.user(user, callback)\\n\\tGithubAPI.http_request(\\\"users/\\\"..user..\\\"/gists\\\", callback)\\nend\\nfunction GithubAPI.gist.list.all(callback) -- return all public gists if called anonymously\\n\\tGithubAPI.http_request(\\\"gists\\\", callback)\\nend\\nfunction GithubAPI.gist.list.allPublic(callback)\\n\\tGithubAPI.http_request(\\\"gists/public\\\", callback)\\nend\\nfunction GithubAPI.gist.list.starred(callback)\\n\\tGithubAPI.http_request(\\\"gists/starred\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nLink: ; rel=\\\"next\\\",\\n ; rel=\\\"last\\\"\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single gist --\\nfunction GithubAPI.gist.get(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Create a gist --\\nfunction GithubAPI.gist.create(public, files, callback ,description)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tpublic = public,\\n\\t\\t\\tfiles = files,\\n\\t\\t\\tdescription = description\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"description\\\": \\\"the description for this gist\\\",\\n \\\"public\\\": true,\\n \\\"files\\\": {\\n \\\"file1.txt\\\": {\\n \\\"content\\\": \\\"String file contents\\\"\\n }\\n }\\n}\\n]]--\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Edit a gist --\\nfunction GithubAPI.gist.edit(id, files, callback, description)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {\\n\\t\\tmethod = \\\"PATCH\\\",\\n\\t\\tdata = {\\n\\t\\t\\tid = id,\\n\\t\\t\\tfiles = files,\\n\\t\\t\\tdescription = description\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"description\\\": \\\"the description for this gist\\\",\\n \\\"files\\\": {\\n \\\"file1.txt\\\": {\\n \\\"content\\\": \\\"updated file contents\\\"\\n },\\n \\\"old_name.txt\\\": {\\n \\\"filename\\\": \\\"new_name.txt\\\",\\n \\\"content\\\": \\\"modified contents\\\"\\n },\\n \\\"new_file.txt\\\": {\\n \\\"content\\\": \\\"a new file\\\"\\n },\\n \\\"delete_this_file.txt\\\": null\\n }\\n}\\n]]--\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Star a gist --\\nfunction GithubAPI.gist.star(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback, {method=\\\"PUT\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Unstar a gist --\\nfunction GithubAPI.gist.unstar(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback, {method=\\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Check if a gist is starred --\\nfunction GithubAPI.gist.checkStar(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback)\\nend\\n\\n--[[\\n-- Response if gist is starred --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n\\n-- Response if gist is not starred --\\nStatus: 404 Not Found\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Fork a gist --\\nfunction GithubAPI.gist.fork(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/forks\\\", callback, {method=\\\"POST\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/2\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n}\\n]]--\\n\\n-- Delete a gist --\\nfunction GithubAPI.gist.delete(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {method=\\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n--- GISTS COMMENTS ---\\n\\n-- List comments on a gist --\\nfunction GithubAPI.gist.comment.list(gist_id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single comment --\\nfunction GithubAPI.gist.comment.get(gist_id, id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Create a comment --\\nfunction GithubAPI.gist.comment.create(gist_id, body, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tbody = body\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\"\\n}\\n]]--\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/comments/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Edit a comment --\\nfunction GithubAPI.gist.comment.edit(gist_id, id, body, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {\\n\\t\\tmethod = \\\"PATCH\\\",\\n\\t\\tdata = {\\n\\t\\t\\tbody = body\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\"\\n}\\n]]--\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Delete a comment --\\nfunction GithubAPI.gist.comment.delete(gist_id, id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {method = \\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n----------------------------------------------------------------------------\\n-------------------------------- TOOLS -------------------------------------\\n----------------------------------------------------------------------------\\n\\nfunction GithubAPI.http_request(url, callback, opts, fullUrl)\\n\\topts = opts or {}\\n\\t-- if GithubAPI.token then opts.headers = TOKEN BEARER\\n\\tif opts.data then opts.data = json.encode(opts.data) end\\n\\n\\tlocal _url\\n\\tif (fullUrl) then _url = url else _url = GithubAPI.location .. url end\\n\\n\\thttp.request(_url, function(data, status, headers)\\n\\t\\tif (status == 500) then error(\\\"Github: Internal Server Error ...\\\") end\\n\\t\\tdata = json.decode(data)\\n\\t\\tcallback(data, status, headers)\\n\\tend, alert, opts)\\nend\\n\\nfunction GithubAPI.explode(div,str) -- credit: http://richard.warburton.it\\n if (div=='') then return false end\\n local pos,arr = 0,{}\\n for st,sp in function() return string.find(str,div,pos,true) end do\\n table.insert(arr,string.sub(str,pos,st-1))\\n pos = sp + 1\\n end\\n table.insert(arr,string.sub(str,pos))\\n return arr\\nend\\n\\n-- GITHUB TIMESTAMP (YYYY-MM-DDTHH:MM:SSZ) to os.time\\nfunction GithubAPI.gtimestamp(githubTime)\\n\\tgithubTime = githubTime:sub(1, #githubTime-1) -- remove Z\\n\\tgithubTime = GithubAPI.explode(\\\"T\\\", githubTime)\\n\\tgithubTime[1] = GithubAPI.explode(\\\"-\\\", githubTime[1])\\n\\tgithubTime[2] = GithubAPI.explode(\\\":\\\", githubTime[2])\\n\\treturn os.time({\\n\\t\\tyear = tonumber(githubTime[1][1]),\\n\\t\\tmonth = tonumber(githubTime[1][2]),\\n\\t\\tday = tonumber(githubTime[1][3]),\\n\\t\\thour = tonumber(githubTime[2][1]),\\n\\t\\tmin = tonumber(githubTime[2][2]),\\n\\t\\tsec = tonumber(githubTime[2][3])\\n\\t})\\nend\"}},\"public\":true,\"created_at\":\"2013-08-21T16:12:27Z\",\"updated_at\":\"2013-08-21T16:26:50Z\",\"description\":\"Github API\",\"comments\":0,\"user\":{\"login\":\"HyroVitalyProtago\",\"id\":3470988,\"avatar_url\":\"https://2.gravatar.com/avatar/ed59562b231a649345f38703948f76f4?d=https%3A%2F%2Fidenticons.github.com%2F6582cb986b7a730b12f7c18dfcc865f0.png\",\"gravatar_id\":\"ed59562b231a649345f38703948f76f4\",\"url\":\"https://api.github.com/users/HyroVitalyProtago\",\"html_url\":\"https://github.com/HyroVitalyProtago\",\"followers_url\":\"https://api.github.com/users/HyroVitalyProtago/followers\",\"following_url\":\"https://api.github.com/users/HyroVitalyProtago/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/HyroVitalyProtago/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/HyroVitalyProtago/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/HyroVitalyProtago/subscriptions\",\"organizations_url\":\"https://api.github.com/users/HyroVitalyProtago/orgs\",\"repos_url\":\"https://api.github.com/users/HyroVitalyProtago/repos\",\"events_url\":\"https://api.github.com/users/HyroVitalyProtago/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/HyroVitalyProtago/received_events\",\"type\":\"User\"},\"comments_url\":\"https://api.github.com/gists/6296553/comments\",\"forks\":[],\"history\":[{\"user\":null,\"version\":\"c464aecd7fea16684e935607eeea7ae4f8caa0e2\",\"committed_at\":\"2013-08-21T16:12:27Z\",\"change_status\":{\"total\":793,\"additions\":793,\"deletions\":0},\"url\":\"https://api.github.com/gists/6296553/c464aecd7fea16684e935607eeea7ae4f8caa0e2\"}]}\n \n https\n POST\n api.github.com\n None\n-/gists/2729818/fork\n+/gists/6296553/forks\n {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n null\n 201\n-[('status', '201 Created'), ('x-ratelimit-remaining', '4969'), ('content-length', '873'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"502531cd2afdff81b572c8565b17f601\"'), ('date', 'Sat, 19 May 2012 07:25:30 GMT'), ('content-type', 'application/json; charset=utf-8'), ('location', 'https://api.github.com/gists/2729865')]\n-{\"updated_at\":\"2012-05-19T07:25:30Z\",\"url\":\"https://api.github.com/gists/2729865\",\"comments\":0,\"public\":true,\"git_pull_url\":\"git://gist.github.com/2729865.git\",\"files\":{\"ror.markdown\":{\"raw_url\":\"https://gist.github.com/raw/2729865/1284e70f4c16550ef32a26aa4f5f0c78edaa7008/ror.markdown\",\"type\":\"text/plain\",\"size\":1076,\"filename\":\"ror.markdown\",\"language\":\"Markdown\"}},\"html_url\":\"https://gist.github.com/2729865\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"login\":\"jacquev6\",\"id\":327146},\"description\":\"RoR setup in AWS EC2(Ubuntu 12.04 LTS)\",\"created_at\":\"2012-05-19T07:25:30Z\",\"git_push_url\":\"git@gist.github.com:2729865.git\",\"id\":\"2729865\"}\n+[('status', '201 Created'), ('x-ratelimit-remaining', '4965'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('cache-control', 'max-age=0, private, must-revalidate'), ('content-length', '1510'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('location', 'https://api.github.com/gists/6296732'), ('access-control-allow-credentials', 'true'), ('date', 'Wed, 21 Aug 2013 16:28:24 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('etag', '\"ceb086d4f395719d1124cade5cedbfd4\"'), ('x-ratelimit-reset', '1377104997')]\n+{\"url\":\"https://api.github.com/gists/6296732\",\"forks_url\":\"https://api.github.com/gists/6296732/forks\",\"commits_url\":\"https://api.github.com/gists/6296732/commits\",\"id\":\"6296732\",\"git_pull_url\":\"https://gist.github.com/6296732.git\",\"git_push_url\":\"https://gist.github.com/6296732.git\",\"html_url\":\"https://gist.github.com/6296732\",\"files\":{},\"public\":true,\"created_at\":\"2013-08-21T16:28:24Z\",\"updated_at\":\"2013-08-21T16:28:24Z\",\"description\":\"Github API\",\"comments\":0,\"user\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://1.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"comments_url\":\"https://api.github.com/gists/6296732/comments\"}\n \n https\n GET\n api.github.com\n None\n-/gists/2729865\n+/gists/6296732\n {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4966'), ('content-length', '3460'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"e829012f18db493a69740de762186eb5\"'), ('date', 'Sat, 19 May 2012 07:26:54 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"description\":\"RoR setup in AWS EC2(Ubuntu 12.04 LTS)\",\"comments\":0,\"updated_at\":\"2012-05-19T07:25:30Z\",\"public\":true,\"git_pull_url\":\"git://gist.github.com/2729865.git\",\"history\":[{\"user\":{\"url\":\"https://api.github.com/users/Kechol\",\"avatar_url\":\"https://secure.gravatar.com/avatar/f2a6400b393749ccd9ad3f24d4995f77?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"f2a6400b393749ccd9ad3f24d4995f77\",\"login\":\"Kechol\",\"id\":625489},\"change_status\":{\"total\":57,\"deletions\":0,\"additions\":57},\"committed_at\":\"2012-05-19T07:06:08Z\",\"version\":\"a655d19a12233e5e5615deb714eae95c433eed57\",\"url\":\"https://api.github.com/gists/2729865/a655d19a12233e5e5615deb714eae95c433eed57\"}],\"git_push_url\":\"git@gist.github.com:2729865.git\",\"url\":\"https://api.github.com/gists/2729865\",\"fork_of\":{\"user\":{\"url\":\"https://api.github.com/users/Kechol\",\"avatar_url\":\"https://secure.gravatar.com/avatar/f2a6400b393749ccd9ad3f24d4995f77?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"f2a6400b393749ccd9ad3f24d4995f77\",\"login\":\"Kechol\",\"id\":625489},\"description\":\"RoR setup in AWS EC2(Ubuntu 12.04 LTS)\",\"comments\":0,\"updated_at\":\"2012-05-19T07:06:08Z\",\"public\":true,\"git_pull_url\":\"git://gist.github.com/2729818.git\",\"git_push_url\":\"git@gist.github.com:2729818.git\",\"url\":\"https://api.github.com/gists/2729818\",\"html_url\":\"https://gist.github.com/2729818\",\"id\":\"2729818\",\"created_at\":\"2012-05-19T07:06:08Z\",\"files\":{\"ror.markdown\":{\"type\":\"text/plain\",\"size\":1076,\"filename\":\"ror.markdown\",\"raw_url\":\"https://gist.github.com/raw/2729818/1284e70f4c16550ef32a26aa4f5f0c78edaa7008/ror.markdown\",\"language\":\"Markdown\"}}},\"html_url\":\"https://gist.github.com/2729865\",\"id\":\"2729865\",\"forks\":[],\"created_at\":\"2012-05-19T07:25:30Z\",\"files\":{\"ror.markdown\":{\"content\":\"## create user\\n\\nsudo useradd -m username\\nvisudo\\n\\n## delete default user\\n\\nsudo userdel ubuntu\\nsudo rm -Rf ubuntu\\n\\n## setup ssh\\n\\nmkdir ~/.ssh\\nvi /etc/ssh/authorized_keys\\nsudo vi /etc/ssh/sshd_config\\n\\n\\n## install packages\\n\\nsudo apt-get update\\n\\nsudo apt-get install sysv-rc-init git-core apache2-utils wget vim\\nsudo apt-get install mysql-client mysql-server libmysqld-dev\\nsudo apt-get install g++ openssl zlib1g readline-common libyaml-dev libssl-dev zlib1g-dev libxml2-dev libxslt1-dev libjson0-dev libgcc1 libreadline-dev\\n\\n\\n## install nginx\\n\\nwget http://nginx.org/keys/nginx_signing.key\\nsudo apt-key add nginx_signing.key\\n\\n### add /etc/sources.list\\n> \\\"deb http://nginx.org/packages/ubuntu/ lucid nginx\\ndeb-src http://nginx.org/packages/ubuntu/ lucid nginx\\\"\\n\\napt-get update\\napt-get install nginx\\n\\n\\n## setup system\\n\\nsudo sysv-rc-init\\n\\n\\n## install ruby\\n\\ncd /usr/local/src\\nsudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz\\nsudo tar zxvf ruby-1.9.3-p194.tar.gz\\ncd ruby-1.9.3-p194\\nsudo ./configure\\nsudo make && make install\\n\\n\\n## install RoR\\n\\nsudo gem install rails\",\"type\":\"text/plain\",\"size\":1076,\"filename\":\"ror.markdown\",\"raw_url\":\"https://gist.github.com/raw/2729865/1284e70f4c16550ef32a26aa4f5f0c78edaa7008/ror.markdown\",\"language\":\"Markdown\"}}}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4964'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '26806'), ('server', 'GitHub.com'), ('last-modified', 'Wed, 21 Aug 2013 16:28:24 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"f2916c23435522156274bed022a322e7\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Wed, 21 Aug 2013 16:28:25 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377104997')]\n+{\"url\":\"https://api.github.com/gists/6296732\",\"forks_url\":\"https://api.github.com/gists/6296732/forks\",\"commits_url\":\"https://api.github.com/gists/6296732/commits\",\"id\":\"6296732\",\"git_pull_url\":\"https://gist.github.com/6296732.git\",\"git_push_url\":\"https://gist.github.com/6296732.git\",\"html_url\":\"https://gist.github.com/6296732\",\"files\":{\"GithubAPI.lua\":{\"filename\":\"GithubAPI.lua\",\"type\":\"text/plain\",\"language\":\"Lua\",\"raw_url\":\"https://gist.github.com/raw/6296732/88aafa25fb28e17013054a117354a37f0d78963c/GithubAPI.lua\",\"size\":21229,\"content\":\"-- GithubAPI\\n-- @Author : Hyro Vitaly Protago\\n-- @Version : 1.0.0\\n\\n--[[\\n\\nINFOS :\\n - Cannot delete an anonymous gist\\n]]--\\n\\nGithubAPI = {\\n\\tlocation = \\\"https://api.github.com/\\\",\\n\\ttoken = nil,\\n\\tOAuth = {\\n\\t\\tauthorizations = {}\\n\\t},\\n\\tgist = {\\n\\t\\tlist = {},\\n\\t\\tcomment = {}\\n\\t},\\n\\tgithub = {}\\n}\\n\\n----------------------------------------------------------------------------\\n------------------------------ Github API ----------------------------------\\n----------------------------------------------------------------------------\\n\\n--- Authentication ---\\n\\n--[[ Scopes --\\n\\nScopes let you specify exactly what type of access you need. Scopes limit access for OAuth tokens.\\nThey do not grant any additional permission beyond that which the user already has.\\n\\nFor the web flow, requested scopes will be displayed to the user on the authorize form.\\n\\nCheck headers to see what OAuth scopes you have, and what the API action accepts.\\n\\n~~~\\n$ curl -H \\\"Authorization: token OAUTH-TOKEN\\\" https://api.github.com/users/technoweenie -I\\nHTTP/1.1 200 OK\\nX-OAuth-Scopes: repo, user\\nX-Accepted-OAuth-Scopes: user\\nX-OAuth-Scopes lists the scopes your token has authorized. X-Accepted-OAuth-Scopes lists the scopes that the action checks for.\\n~~~\\n\\n- (no scope)\\npublic read-only access (includes public user profile info, public repo info, and gists).\\n- user\\nRead/write access to profile info only. Note: this scope includes user:email and user:follow.\\n- user:email\\nRead access to a user’s email addresses.\\n- user:follow\\nAccess to follow or unfollow other users.\\n- public_repo\\nRead/write access to public repos and organizations.\\n- repo\\nRead/write access to public and private repos and organizations.\\n- repo:status\\nRead/write access to public and private repository commit statuses.\\nThis scope is only necessary to grant other users or services access to private repository commit statuses without granting access to the code.\\nThe repo and public_repo scopes already include access to commit status for private and public repositories respectively.\\n- delete_repo\\nDelete access to adminable repositories.\\n- notifications\\nRead access to a user’s notifications. repo is accepted too.\\n- gist\\nWrite access to gists.\\n\\nNOTE: Your application can request the scopes in the initial redirection. You can specify multiple scopes by separating them by a comma.\\n~~~\\nhttps://github.com/login/oauth/authorize?\\n client_id=...&\\n scope=user,public_repo\\n~~~\\n]]--\\n\\n-- Redirect users to request GitHub access --\\nfunction GithubAPI.OAuth.getToken(client_id, scope, callback)\\n\\tGithubAPI.http_request(\\\"https://github.com/login/oauth/authorize?client_id=\\\"..client_id..\\\"&scope=\\\"..scope, function(data, status, headers)\\n\\t\\tGithubAPI.OAuth._getToken(client_id, client_secret, data, callback)\\n\\tend, nil, true)\\nend\\n-- GitHub redirects back to your site --\\nfunction GithubAPI.OAuth._getToken(client_id, client_secret, code, callback)\\n\\tGithubAPI.http_request(\\\"https://github.com/login/oauth/access_token\\\", callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tclient_id = client_id,\\n\\t\\t\\tclient_secret = client_secret,\\n\\t\\t\\tcode = code\\n\\t\\t}\\n\\t}, true)\\nend\\n\\n-- List your authorizations --\\nfunction GithubAPI.OAuth.authorizations.list(callback)\\n\\tGithubAPI.http_request(\\\"authorizations\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nLink: ; rel=\\\"next\\\",\\n ; rel=\\\"last\\\"\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single authorization --\\nfunction GithubAPI.OAuth.authorizations.get(id, callback)\\n\\tGithubAPI.http_request(\\\"authorizations/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n}\\n]]--\\n\\n-- Create a new authorization --\\nfunction GithubAPI.OAuth.authorizations.create(callback, scopes, note, note_url, client_id, client_secret)\\n\\tGithubAPI.http_request(\\\"authorizations/\\\", callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tscopes = scopes,\\n\\t\\t\\tnote = note,\\n\\t\\t\\tnote_url = note_url,\\n\\t\\t\\tclient_id = client_id,\\n\\t\\t\\tclient_secret = client_secret\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\nscopes\\nOptional array - A list of scopes that this authorization is in.\\n\\nnote\\nOptional string - A note to remind you what the OAuth token is for.\\n\\nnote_url\\nOptional string - A URL to remind you what app the OAuth token is for.\\n\\nclient_id\\nOptional String - The 20 character OAuth app client key for which to create the token.\\n\\nclient_secret\\nOptional String - The 40 character OAuth app client secret for which to create the token.\\n~~~\\n{\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"note\\\": \\\"admin script\\\"\\n}\\n~~~\\n]]--\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/authorizations/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/authorizations/1\\\",\\n \\\"scopes\\\": [\\n \\\"public_repo\\\"\\n ],\\n \\\"token\\\": \\\"abc123\\\",\\n \\\"app\\\": {\\n \\\"url\\\": \\\"http://my-github-app.com\\\",\\n \\\"name\\\": \\\"my github app\\\",\\n \\\"client_id\\\": \\\"abcde12345fghij67890\\\"\\n },\\n \\\"note\\\": \\\"optional note\\\",\\n \\\"note_url\\\": \\\"http://optional/note/url\\\",\\n \\\"updated_at\\\": \\\"2011-09-06T20:39:23Z\\\",\\n \\\"created_at\\\": \\\"2011-09-06T17:26:27Z\\\"\\n}\\n]]--\\n\\n-- TODO\\n-- Update\\n-- Check\\n-- Delete\\n\\n--- GISTS ---\\n\\n-- List gists --\\nfunction GithubAPI.gist.list.user(user, callback)\\n\\tGithubAPI.http_request(\\\"users/\\\"..user..\\\"/gists\\\", callback)\\nend\\nfunction GithubAPI.gist.list.all(callback) -- return all public gists if called anonymously\\n\\tGithubAPI.http_request(\\\"gists\\\", callback)\\nend\\nfunction GithubAPI.gist.list.allPublic(callback)\\n\\tGithubAPI.http_request(\\\"gists/public\\\", callback)\\nend\\nfunction GithubAPI.gist.list.starred(callback)\\n\\tGithubAPI.http_request(\\\"gists/starred\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nLink: ; rel=\\\"next\\\",\\n ; rel=\\\"last\\\"\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single gist --\\nfunction GithubAPI.gist.get(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Create a gist --\\nfunction GithubAPI.gist.create(public, files, callback ,description)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tpublic = public,\\n\\t\\t\\tfiles = files,\\n\\t\\t\\tdescription = description\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"description\\\": \\\"the description for this gist\\\",\\n \\\"public\\\": true,\\n \\\"files\\\": {\\n \\\"file1.txt\\\": {\\n \\\"content\\\": \\\"String file contents\\\"\\n }\\n }\\n}\\n]]--\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Edit a gist --\\nfunction GithubAPI.gist.edit(id, files, callback, description)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {\\n\\t\\tmethod = \\\"PATCH\\\",\\n\\t\\tdata = {\\n\\t\\t\\tid = id,\\n\\t\\t\\tfiles = files,\\n\\t\\t\\tdescription = description\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"description\\\": \\\"the description for this gist\\\",\\n \\\"files\\\": {\\n \\\"file1.txt\\\": {\\n \\\"content\\\": \\\"updated file contents\\\"\\n },\\n \\\"old_name.txt\\\": {\\n \\\"filename\\\": \\\"new_name.txt\\\",\\n \\\"content\\\": \\\"modified contents\\\"\\n },\\n \\\"new_file.txt\\\": {\\n \\\"content\\\": \\\"a new file\\\"\\n },\\n \\\"delete_this_file.txt\\\": null\\n }\\n}\\n]]--\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\",\\n \\\"forks\\\": [\\n {\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"url\\\": \\\"https://api.github.com/gists/add0d71b065f55c46f60\\\",\\n \\\"created_at\\\": \\\"2011-04-14T16:00:49Z\\\"\\n }\\n ],\\n \\\"history\\\": [\\n {\\n \\\"url\\\": \\\"https://api.github.com/gists/80bdb0d081c447600e18\\\",\\n \\\"version\\\": \\\"57a7f021a713b1c5a6a199b54cc514735d2d462f\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"change_status\\\": {\\n \\\"deletions\\\": 0,\\n \\\"additions\\\": 180,\\n \\\"total\\\": 180\\n },\\n \\\"committed_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n }\\n ]\\n}\\n]]--\\n\\n-- Star a gist --\\nfunction GithubAPI.gist.star(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback, {method=\\\"PUT\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Unstar a gist --\\nfunction GithubAPI.gist.unstar(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback, {method=\\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Check if a gist is starred --\\nfunction GithubAPI.gist.checkStar(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/star\\\", callback)\\nend\\n\\n--[[\\n-- Response if gist is starred --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n\\n-- Response if gist is not starred --\\nStatus: 404 Not Found\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n-- Fork a gist --\\nfunction GithubAPI.gist.fork(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id..\\\"/forks\\\", callback, {method=\\\"POST\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/2\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"url\\\": \\\"https://api.github.com/gists/88a3112be74ba6ad701e\\\",\\n \\\"id\\\": \\\"1\\\",\\n \\\"description\\\": \\\"description of gist\\\",\\n \\\"public\\\": true,\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"files\\\": {\\n \\\"ring.erl\\\": {\\n \\\"size\\\": 932,\\n \\\"filename\\\": \\\"ring.erl\\\",\\n \\\"raw_url\\\": \\\"https://gist.github.com/raw/365370/8c4d2d43d178df44f4c03a7f2ac0ff512853564e/ring.erl\\\"\\n }\\n },\\n \\\"comments\\\": 0,\\n \\\"comments_url\\\": \\\"https://api.github.com/gists/8438e99468ee9a4ab10e/comments/\\\",\\n \\\"html_url\\\": \\\"https://gist.github.com/1\\\",\\n \\\"git_pull_url\\\": \\\"git://gist.github.com/1.git\\\",\\n \\\"git_push_url\\\": \\\"git@gist.github.com:1.git\\\",\\n \\\"created_at\\\": \\\"2010-04-14T02:15:15Z\\\"\\n}\\n]]--\\n\\n-- Delete a gist --\\nfunction GithubAPI.gist.delete(id, callback)\\n\\tGithubAPI.http_request(\\\"gists/\\\"..id, callback, {method=\\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n--- GISTS COMMENTS ---\\n\\n-- List comments on a gist --\\nfunction GithubAPI.gist.comment.list(gist_id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments\\\", callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n[\\n {\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n }\\n]\\n]]--\\n\\n-- Get a single comment --\\nfunction GithubAPI.gist.comment.get(gist_id, id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback)\\nend\\n\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Create a comment --\\nfunction GithubAPI.gist.comment.create(gist_id, body, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {\\n\\t\\tmethod = \\\"POST\\\",\\n\\t\\tdata = {\\n\\t\\t\\tbody = body\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\"\\n}\\n]]--\\n--[[ Response --\\nStatus: 201 Created\\nLocation: https://api.github.com/gists/comments/1\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Edit a comment --\\nfunction GithubAPI.gist.comment.edit(gist_id, id, body, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {\\n\\t\\tmethod = \\\"PATCH\\\",\\n\\t\\tdata = {\\n\\t\\t\\tbody = body\\n\\t\\t}\\n\\t})\\nend\\n\\n--[[ Input --\\n{\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\"\\n}\\n]]--\\n--[[ Response --\\nStatus: 200 OK\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n{\\n \\\"id\\\": 1,\\n \\\"url\\\": \\\"https://api.github.com/gists/ae709e9cf889e485e65f/comments/1\\\",\\n \\\"body\\\": \\\"Just commenting for the sake of commenting\\\",\\n \\\"user\\\": {\\n \\\"login\\\": \\\"octocat\\\",\\n \\\"id\\\": 1,\\n \\\"avatar_url\\\": \\\"https://github.com/images/error/octocat_happy.gif\\\",\\n \\\"gravatar_id\\\": \\\"somehexcode\\\",\\n \\\"url\\\": \\\"https://api.github.com/users/octocat\\\"\\n },\\n \\\"created_at\\\": \\\"2011-04-18T23:23:56Z\\\"\\n}\\n]]--\\n\\n-- Delete a comment --\\nfunction GithubAPI.gist.comment.delete(gist_id, id, callback)\\n\\tGithubAPI.http_request(\\\"gists/..\\\"gist_id\\\"../comments/\\\"..id, callback, {method = \\\"DELETE\\\"})\\nend\\n\\n--[[ Response --\\nStatus: 204 No Content\\nX-RateLimit-Limit: 5000\\nX-RateLimit-Remaining: 4999\\n]]--\\n\\n----------------------------------------------------------------------------\\n-------------------------------- TOOLS -------------------------------------\\n----------------------------------------------------------------------------\\n\\nfunction GithubAPI.http_request(url, callback, opts, fullUrl)\\n\\topts = opts or {}\\n\\t-- if GithubAPI.token then opts.headers = TOKEN BEARER\\n\\tif opts.data then opts.data = json.encode(opts.data) end\\n\\n\\tlocal _url\\n\\tif (fullUrl) then _url = url else _url = GithubAPI.location .. url end\\n\\n\\thttp.request(_url, function(data, status, headers)\\n\\t\\tif (status == 500) then error(\\\"Github: Internal Server Error ...\\\") end\\n\\t\\tdata = json.decode(data)\\n\\t\\tcallback(data, status, headers)\\n\\tend, alert, opts)\\nend\\n\\nfunction GithubAPI.explode(div,str) -- credit: http://richard.warburton.it\\n if (div=='') then return false end\\n local pos,arr = 0,{}\\n for st,sp in function() return string.find(str,div,pos,true) end do\\n table.insert(arr,string.sub(str,pos,st-1))\\n pos = sp + 1\\n end\\n table.insert(arr,string.sub(str,pos))\\n return arr\\nend\\n\\n-- GITHUB TIMESTAMP (YYYY-MM-DDTHH:MM:SSZ) to os.time\\nfunction GithubAPI.gtimestamp(githubTime)\\n\\tgithubTime = githubTime:sub(1, #githubTime-1) -- remove Z\\n\\tgithubTime = GithubAPI.explode(\\\"T\\\", githubTime)\\n\\tgithubTime[1] = GithubAPI.explode(\\\"-\\\", githubTime[1])\\n\\tgithubTime[2] = GithubAPI.explode(\\\":\\\", githubTime[2])\\n\\treturn os.time({\\n\\t\\tyear = tonumber(githubTime[1][1]),\\n\\t\\tmonth = tonumber(githubTime[1][2]),\\n\\t\\tday = tonumber(githubTime[1][3]),\\n\\t\\thour = tonumber(githubTime[2][1]),\\n\\t\\tmin = tonumber(githubTime[2][2]),\\n\\t\\tsec = tonumber(githubTime[2][3])\\n\\t})\\nend\"}},\"public\":true,\"created_at\":\"2013-08-21T16:28:24Z\",\"updated_at\":\"2013-08-21T16:28:24Z\",\"description\":\"Github API\",\"comments\":0,\"user\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://2.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"comments_url\":\"https://api.github.com/gists/6296732/comments\",\"forks\":[],\"history\":[{\"user\":null,\"version\":\"c464aecd7fea16684e935607eeea7ae4f8caa0e2\",\"committed_at\":\"2013-08-21T16:12:27Z\",\"change_status\":{\"total\":793,\"additions\":793,\"deletions\":0},\"url\":\"https://api.github.com/gists/6296732/c464aecd7fea16684e935607eeea7ae4f8caa0e2\"}],\"fork_of\":{\"url\":\"https://api.github.com/gists/6296553\",\"forks_url\":\"https://api.github.com/gists/6296553/forks\",\"commits_url\":\"https://api.github.com/gists/6296553/commits\",\"id\":\"6296553\",\"git_pull_url\":\"https://gist.github.com/6296553.git\",\"git_push_url\":\"https://gist.github.com/6296553.git\",\"html_url\":\"https://gist.github.com/6296553\",\"files\":{},\"public\":true,\"created_at\":\"2013-08-21T16:12:27Z\",\"updated_at\":\"2013-08-21T16:28:24Z\",\"description\":\"Github API\",\"comments\":0,\"user\":{\"login\":\"HyroVitalyProtago\",\"id\":3470988,\"avatar_url\":\"https://1.gravatar.com/avatar/ed59562b231a649345f38703948f76f4?d=https%3A%2F%2Fidenticons.github.com%2F6582cb986b7a730b12f7c18dfcc865f0.png\",\"gravatar_id\":\"ed59562b231a649345f38703948f76f4\",\"url\":\"https://api.github.com/users/HyroVitalyProtago\",\"html_url\":\"https://github.com/HyroVitalyProtago\",\"followers_url\":\"https://api.github.com/users/HyroVitalyProtago/followers\",\"following_url\":\"https://api.github.com/users/HyroVitalyProtago/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/HyroVitalyProtago/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/HyroVitalyProtago/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/HyroVitalyProtago/subscriptions\",\"organizations_url\":\"https://api.github.com/users/HyroVitalyProtago/orgs\",\"repos_url\":\"https://api.github.com/users/HyroVitalyProtago/repos\",\"events_url\":\"https://api.github.com/users/HyroVitalyProtago/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/HyroVitalyProtago/received_events\",\"type\":\"User\"},\"comments_url\":\"https://api.github.com/gists/6296553/comments\"}}\n "},{"sha":"7d335ffc25d0f2bf8208709c1d73ec7b216eee61","filename":"github/tests/ReplayData/Github.testGetRepos.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Github.testGetRepos.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Github.testGetRepos.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Github.testGetRepos.txt?ref=a6597499c2f82e063074a3036d875417d5efa296"},{"sha":"476baddfbabd644ff708e3ea3778ae474ff03c86","filename":"github/tests/ReplayData/Github.testGetReposSince.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Github.testGetReposSince.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Github.testGetReposSince.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Github.testGetReposSince.txt?ref=a6597499c2f82e063074a3036d875417d5efa296"},{"sha":"6f6e25494e129725b5aad650839888e3494c52f7","filename":"github/tests/ReplayData/Hook.testTest.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Hook.testTest.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Hook.testTest.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Hook.testTest.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -2,7 +2,7 @@ https\n POST\n api.github.com\n None\n-/repos/jacquev6/PyGithub/hooks/257993/test\n+/repos/jacquev6/PyGithub/hooks/257993/tests\n {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n null\n 204"},{"sha":"08c61a84ee63868aac85f3d64397e65b0fdf9132","filename":"github/tests/ReplayData/NamedUser.testHasInFollowing.txt","status":"added","additions":22,"deletions":0,"changes":22,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/NamedUser.testHasInFollowing.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/NamedUser.testHasInFollowing.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/NamedUser.testHasInFollowing.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,22 @@\n+https\n+GET\n+api.github.com\n+None\n+/users/nvie\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '1218'), ('server', 'GitHub.com'), ('last-modified', 'Wed, 21 Aug 2013 16:26:40 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"8e2b307f8fb4186bfb512febd7215fc8\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Wed, 21 Aug 2013 17:20:44 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377108637')]\n+{\"login\":\"nvie\",\"id\":83844,\"avatar_url\":\"https://2.gravatar.com/avatar/466ef7561a0b100dc5a1021959962d28?d=https%3A%2F%2Fidenticons.github.com%2Fe6d0513ce49cc06cb956251623cb8fd9.png\",\"gravatar_id\":\"466ef7561a0b100dc5a1021959962d28\",\"url\":\"https://api.github.com/users/nvie\",\"html_url\":\"https://github.com/nvie\",\"followers_url\":\"https://api.github.com/users/nvie/followers\",\"following_url\":\"https://api.github.com/users/nvie/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/nvie/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/nvie/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/nvie/subscriptions\",\"organizations_url\":\"https://api.github.com/users/nvie/orgs\",\"repos_url\":\"https://api.github.com/users/nvie/repos\",\"events_url\":\"https://api.github.com/users/nvie/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/nvie/received_events\",\"type\":\"User\",\"name\":\"Vincent Driessen\",\"company\":\"3rd Cloud\",\"blog\":\"http://nvie.com\",\"location\":\"Netherlands\",\"email\":\"vincent@3rdcloud.com\",\"hireable\":true,\"bio\":null,\"public_repos\":86,\"followers\":530,\"following\":45,\"created_at\":\"2009-05-12T21:19:38Z\",\"updated_at\":\"2013-08-21T16:26:40Z\",\"public_gists\":38}\n+\n+https\n+GET\n+api.github.com\n+None\n+/users/jacquev6/following/nvie\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+204\n+[('status', '204 No Content'), ('x-ratelimit-remaining', '4995'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('vary', 'Accept-Encoding'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('access-control-allow-credentials', 'true'), ('date', 'Wed, 21 Aug 2013 17:20:48 GMT'), ('access-control-allow-origin', '*'), ('x-ratelimit-reset', '1377108637')]\n+\n+"},{"sha":"dfc62ba258a155c9b40432ec67a51b8b8822ec73","filename":"github/tests/ReplayData/Persistence.setUp.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Persistence.setUp.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Persistence.setUp.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Persistence.setUp.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '13698'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:09:11 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"8600bedcb7fed1d8065e1693e05529ce\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:13:08 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377140429')]\n+{\"id\":12156762,\"name\":\"PyGithub\",\"full_name\":\"akfish/PyGithub\",\"owner\":{\"login\":\"akfish\",\"id\":922715,\"avatar_url\":\"https://1.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png\",\"gravatar_id\":\"12a1b44d4e5c19cee59618084602b112\",\"url\":\"https://api.github.com/users/akfish\",\"html_url\":\"https://github.com/akfish\",\"followers_url\":\"https://api.github.com/users/akfish/followers\",\"following_url\":\"https://api.github.com/users/akfish/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/akfish/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/akfish/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/akfish/subscriptions\",\"organizations_url\":\"https://api.github.com/users/akfish/orgs\",\"repos_url\":\"https://api.github.com/users/akfish/repos\",\"events_url\":\"https://api.github.com/users/akfish/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/akfish/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/akfish/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":true,\"url\":\"https://api.github.com/repos/akfish/PyGithub\",\"forks_url\":\"https://api.github.com/repos/akfish/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/akfish/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/akfish/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/akfish/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/akfish/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/akfish/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/akfish/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/akfish/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/akfish/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/akfish/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/akfish/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/akfish/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/akfish/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/akfish/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/akfish/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/akfish/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/akfish/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/akfish/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/akfish/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/akfish/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/akfish/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/akfish/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/akfish/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/akfish/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/akfish/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/akfish/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/akfish/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/akfish/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/akfish/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/akfish/PyGithub/labels{/name}\",\"created_at\":\"2013-08-16T10:56:11Z\",\"updated_at\":\"2013-08-22T02:09:11Z\",\"pushed_at\":\"2013-08-22T02:09:09Z\",\"git_url\":\"git://github.com/akfish/PyGithub.git\",\"ssh_url\":\"git@github.com:akfish/PyGithub.git\",\"clone_url\":\"https://github.com/akfish/PyGithub.git\",\"svn_url\":\"https://github.com/akfish/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":6736,\"watchers_count\":0,\"language\":\"Python\",\"has_issues\":false,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":0,\"mirror_url\":null,\"open_issues_count\":0,\"forks\":0,\"open_issues\":0,\"watchers\":0,\"master_branch\":\"master\",\"default_branch\":\"master\",\"permissions\":{\"admin\":true,\"push\":true,\"pull\":true},\"network_count\":70,\"parent\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"},\"source\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"}}\n+"},{"sha":"b6d8aeec9b3c663cfe561eb2513a514f10011673","filename":"github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Persistence.testLoadAndUpdate.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/akfish/PyGithub\n+{'If-None-Match': '\"8600bedcb7fed1d8065e1693e05529ce\"', 'User-Agent': 'PyGithub/Python', 'Authorization': 'Basic login_and_password_removed', 'If-Modified-Since': 'Thu, 22 Aug 2013 02:09:11 GMT'}\n+null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '13712'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 22 Aug 2013 02:14:54 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '\"ef281ef0e821c18f80da36902727160b\"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Thu, 22 Aug 2013 02:15:01 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1377140429')]\n+{\"id\":12156762,\"name\":\"PyGithub\",\"full_name\":\"akfish/PyGithub\",\"owner\":{\"login\":\"akfish\",\"id\":922715,\"avatar_url\":\"https://0.gravatar.com/avatar/12a1b44d4e5c19cee59618084602b112?d=https%3A%2F%2Fidenticons.github.com%2F6eb90fb68a77fb5a5a997c6264bedf35.png\",\"gravatar_id\":\"12a1b44d4e5c19cee59618084602b112\",\"url\":\"https://api.github.com/users/akfish\",\"html_url\":\"https://github.com/akfish\",\"followers_url\":\"https://api.github.com/users/akfish/followers\",\"following_url\":\"https://api.github.com/users/akfish/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/akfish/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/akfish/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/akfish/subscriptions\",\"organizations_url\":\"https://api.github.com/users/akfish/orgs\",\"repos_url\":\"https://api.github.com/users/akfish/repos\",\"events_url\":\"https://api.github.com/users/akfish/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/akfish/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/akfish/PyGithub\",\"description\":\"Python library implementing the full Github API v3 - AKFish Fork\",\"fork\":true,\"url\":\"https://api.github.com/repos/akfish/PyGithub\",\"forks_url\":\"https://api.github.com/repos/akfish/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/akfish/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/akfish/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/akfish/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/akfish/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/akfish/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/akfish/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/akfish/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/akfish/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/akfish/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/akfish/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/akfish/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/akfish/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/akfish/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/akfish/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/akfish/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/akfish/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/akfish/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/akfish/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/akfish/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/akfish/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/akfish/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/akfish/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/akfish/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/akfish/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/akfish/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/akfish/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/akfish/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/akfish/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/akfish/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/akfish/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/akfish/PyGithub/labels{/name}\",\"created_at\":\"2013-08-16T10:56:11Z\",\"updated_at\":\"2013-08-22T02:14:54Z\",\"pushed_at\":\"2013-08-22T02:09:09Z\",\"git_url\":\"git://github.com/akfish/PyGithub.git\",\"ssh_url\":\"git@github.com:akfish/PyGithub.git\",\"clone_url\":\"https://github.com/akfish/PyGithub.git\",\"svn_url\":\"https://github.com/akfish/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":6736,\"watchers_count\":0,\"language\":\"Python\",\"has_issues\":false,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":0,\"mirror_url\":null,\"open_issues_count\":0,\"forks\":0,\"open_issues\":0,\"watchers\":0,\"master_branch\":\"master\",\"default_branch\":\"master\",\"permissions\":{\"admin\":true,\"push\":true,\"pull\":true},\"network_count\":70,\"parent\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"},\"source\":{\"id\":3544490,\"name\":\"PyGithub\",\"full_name\":\"jacquev6/PyGithub\",\"owner\":{\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"url\":\"https://api.github.com/users/jacquev6\",\"html_url\":\"https://github.com/jacquev6\",\"followers_url\":\"https://api.github.com/users/jacquev6/followers\",\"following_url\":\"https://api.github.com/users/jacquev6/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/jacquev6/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/jacquev6/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/jacquev6/subscriptions\",\"organizations_url\":\"https://api.github.com/users/jacquev6/orgs\",\"repos_url\":\"https://api.github.com/users/jacquev6/repos\",\"events_url\":\"https://api.github.com/users/jacquev6/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/jacquev6/received_events\",\"type\":\"User\"},\"private\":false,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"description\":\"Python library implementing the full Github API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"forks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/jacquev6/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/jacquev6/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/jacquev6/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/jacquev6/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/jacquev6/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}\",\"contents_url\":\"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/jacquev6/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/jacquev6/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2013-08-21T20:32:08Z\",\"pushed_at\":\"2013-08-21T20:31:45Z\",\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"homepage\":\"http://jacquev6.github.com/PyGithub\",\"size\":7437,\"watchers_count\":248,\"language\":\"Python\",\"has_issues\":true,\"has_downloads\":true,\"has_wiki\":true,\"forks_count\":70,\"mirror_url\":null,\"open_issues_count\":17,\"forks\":70,\"open_issues\":17,\"watchers\":248,\"master_branch\":\"master\",\"default_branch\":\"master\"}}\n+"},{"sha":"3d4b27e8aa1282bb8401e6e2ae753044a7208686","filename":"github/tests/ReplayData/Status.testGetLastMessage.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetLastMessage.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetLastMessage.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Status.testGetLastMessage.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+status.github.com\n+443\n+/api/last-message.json\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('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')]\n+{\"status\":\"good\",\"body\":\"Everything operating normally.\",\"created_on\":\"2013-09-01T15:41:46Z\"}\n+"},{"sha":"6c79412a7a4039830228927d1ca5c9557298bdd3","filename":"github/tests/ReplayData/Status.testGetMessages.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetMessages.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetMessages.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Status.testGetMessages.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+status.github.com\n+443\n+/api/messages.json\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('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')]\n+[{\"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\"}]\n+"},{"sha":"e01aec021bcb172a4eaf436c5d23e69594bc022f","filename":"github/tests/ReplayData/Status.testGetStatus.txt","status":"added","additions":11,"deletions":0,"changes":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetStatus.txt","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/ReplayData/Status.testGetStatus.txt","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/ReplayData/Status.testGetStatus.txt?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,11 @@\n+https\n+GET\n+status.github.com\n+443\n+/api/status.json\n+{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\n+null\n+200\n+[('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')]\n+{\"status\":\"good\",\"last_updated\":\"2013-09-06T08:29:27Z\"}\n+"},{"sha":"0bb3c935ce2f4fa86d410b2759a4825e42bc44a3","filename":"github/tests/Status.py","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Status.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/github/tests/Status.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/github/tests/Status.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -0,0 +1,43 @@\n+# -*- coding: utf-8 -*-\n+\n+############################ Copyrights and license ############################\n+# #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+################################################################################\n+\n+import Framework\n+\n+import github\n+import datetime\n+\n+\n+class Status(Framework.TestCase):\n+ def testGetStatus(self):\n+ status = self.g.get_api_status()\n+ self.assertEqual(status.status, \"good\")\n+ self.assertEqual(status.last_updated, datetime.datetime(2013, 9, 6, 8, 29, 27))\n+\n+ def testGetLastMessage(self):\n+ message = self.g.get_last_api_status_message()\n+ self.assertEqual(message.status, \"good\")\n+ self.assertEqual(message.body, \"Everything operating normally.\")\n+ self.assertEqual(message.created_on, datetime.datetime(2013, 9, 1, 15, 41, 46))\n+\n+ def testGetMessages(self):\n+ self.assertListKeyEqual(self.g.get_api_status_messages(), lambda m: m.status, [\"good\", \"minor\", \"good\", \"minor\", \"good\", \"minor\", \"good\", \"minor\", \"good\", \"major\", \"good\", \"minor\"])"},{"sha":"3439c6f189e0bd05a747ff4c702518068fde7b3b","filename":"scripts/fix_headers.py","status":"modified","additions":2,"deletions":0,"changes":2,"blob_url":"https://github.com/jacquev6/PyGithub/blob/a6597499c2f82e063074a3036d875417d5efa296/scripts/fix_headers.py","raw_url":"https://github.com/jacquev6/PyGithub/raw/a6597499c2f82e063074a3036d875417d5efa296/scripts/fix_headers.py","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/scripts/fix_headers.py?ref=a6597499c2f82e063074a3036d875417d5efa296","patch":"@@ -132,6 +132,8 @@ def findHeadersAndFiles():\n dirs.remove(\".git\")\n if \"developer.github.com\" in dirs:\n dirs.remove(\"developer.github.com\")\n+ if \"build\" in dirs:\n+ dirs.remove(\"build\")\n \n for filename in files:\n fullname = os.path.join(root, filename)"}]} https GET diff --git a/tests/ReplayData/PullRequest.testGetFiles.txt b/tests/ReplayData/PullRequest.testGetFiles.txt index 69f64d309c..81a8908a78 100644 --- a/tests/ReplayData/PullRequest.testGetFiles.txt +++ b/tests/ReplayData/PullRequest.testGetFiles.txt @@ -7,5 +7,5 @@ None None 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4971'), ('content-length', '169480'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"a6f83dd38ea0a62d423fefb7b8353561"'), ('date', 'Sun, 27 May 2012 10:21:15 GMT'), ('content-type', 'application/json; charset=utf-8')] -[{"patch":"@@ -70,7 +70,7 @@ def __useAttributes( self, attributes ):\n \n # @toto No need to check if attribute is in attributes when attribute is mandatory\n {% for attribute in class.attributes|dictsort:\"name\" %}\n- if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None:\n+ if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None: # pragma no branch\n \n {% if attribute.type.cardinality == \"scalar\" %}\n {% if attribute.type.simple %}","status":"modified","deletions":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","changes":2,"additions":1,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","filename":"codegen/templates/GithubObject.py"},{"patch":"@@ -568,78 +568,78 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], ( str, unicode ) )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], ( str, unicode ) )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], ( str, unicode ) )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], ( str, unicode ) )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], ( str, unicode ) )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], ( str, unicode ) )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], ( str, unicode ) )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":25,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","changes":50,"additions":25,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","filename":"src/github/AuthenticatedUser.py"},{"patch":"@@ -117,21 +117,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"app\", \"created_at\", \"id\", \"note\", \"note_url\", \"scopes\", \"token\", \"updated_at\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"app\" in attributes and attributes[ \"app\" ] is not None:\n+ if \"app\" in attributes and attributes[ \"app\" ] is not None: # pragma no branch\n self.__app = attributes[ \"app\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"note\" in attributes and attributes[ \"note\" ] is not None:\n+ if \"note\" in attributes and attributes[ \"note\" ] is not None: # pragma no branch\n self.__note = attributes[ \"note\" ]\n- if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None:\n+ if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None: # pragma no branch\n self.__note_url = attributes[ \"note_url\" ]\n- if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None:\n+ if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None: # pragma no branch\n self.__scopes = attributes[ \"scopes\" ]\n- if \"token\" in attributes and attributes[ \"token\" ] is not None:\n+ if \"token\" in attributes and attributes[ \"token\" ] is not None: # pragma no branch\n self.__token = attributes[ \"token\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","changes":18,"additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","filename":"src/github/Authorization.py"},{"patch":"@@ -28,9 +28,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]","status":"modified","deletions":2,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","changes":4,"additions":2,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","filename":"src/github/Branch.py"},{"patch":"@@ -120,33 +120,33 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"commit\", \"committer\", \"files\", \"parents\", \"sha\", \"stats\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = NamedUser.NamedUser( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = GitCommit.GitCommit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = NamedUser.NamedUser( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"files\" ], list ) and ( len( attributes[ \"files\" ] ) == 0 or isinstance( attributes[ \"files\" ][ 0 ], dict ) )\n self.__files = [\n CommitFile.CommitFile( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"files\" ]\n ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n Commit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"stats\" in attributes and attributes[ \"stats\" ] is not None:\n+ if \"stats\" in attributes and attributes[ \"stats\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"stats\" ], dict )\n self.__stats = CommitStats.CommitStats( self.__requester, attributes[ \"stats\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","changes":16,"additions":8,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","filename":"src/github/Commit.py"},{"patch":"@@ -121,36 +121,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], ( str, unicode ) )\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], ( str, unicode ) )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"line\" ], int )\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], ( str, unicode ) )\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"position\" ], int )\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","changes":22,"additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","filename":"src/github/CommitComment.py"},{"patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]","status":"modified","deletions":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","changes":18,"additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","filename":"src/github/CommitFile.py"},{"patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"deletions\", \"total\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"additions\" ], int )\n self.__additions = attributes[ \"additions\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"deletions\" ], int )\n self.__deletions = attributes[ \"deletions\" ]\n- if \"total\" in attributes and attributes[ \"total\" ] is not None:\n+ if \"total\" in attributes and attributes[ \"total\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total\" ], int )\n self.__total = attributes[ \"total\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","filename":"src/github/CommitStats.py"},{"patch":"@@ -162,43 +162,43 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"accesskeyid\", \"acl\", \"bucket\", \"content_type\", \"created_at\", \"description\", \"download_count\", \"expirationdate\", \"html_url\", \"id\", \"mime_type\", \"name\", \"path\", \"policy\", \"prefix\", \"redirect\", \"s3_url\", \"signature\", \"size\", \"url\", \"x-amz-meta-content-disposition\" ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None:\n+ if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None: # pragma no branch\n self.__accesskeyid = attributes[ \"accesskeyid\" ]\n- if \"acl\" in attributes and attributes[ \"acl\" ] is not None:\n+ if \"acl\" in attributes and attributes[ \"acl\" ] is not None: # pragma no branch\n self.__acl = attributes[ \"acl\" ]\n- if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None:\n+ if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None: # pragma no branch\n self.__bucket = attributes[ \"bucket\" ]\n- if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None:\n+ if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None: # pragma no branch\n self.__content_type = attributes[ \"content_type\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n self.__description = attributes[ \"description\" ]\n- if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None:\n+ if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None: # pragma no branch\n self.__download_count = attributes[ \"download_count\" ]\n- if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None:\n+ if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None: # pragma no branch\n self.__expirationdate = attributes[ \"expirationdate\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None:\n+ if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None: # pragma no branch\n self.__mime_type = attributes[ \"mime_type\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"policy\" in attributes and attributes[ \"policy\" ] is not None:\n+ if \"policy\" in attributes and attributes[ \"policy\" ] is not None: # pragma no branch\n self.__policy = attributes[ \"policy\" ]\n- if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None:\n+ if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None: # pragma no branch\n self.__prefix = attributes[ \"prefix\" ]\n- if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None:\n+ if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None: # pragma no branch\n self.__redirect = attributes[ \"redirect\" ]\n- if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None:\n+ if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None: # pragma no branch\n self.__s3_url = attributes[ \"s3_url\" ]\n- if \"signature\" in attributes and attributes[ \"signature\" ] is not None:\n+ if \"signature\" in attributes and attributes[ \"signature\" ] is not None: # pragma no branch\n self.__signature = attributes[ \"signature\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":20,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","changes":40,"additions":20,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","filename":"src/github/Download.py"},{"patch":"@@ -60,22 +60,22 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"created_at\", \"id\", \"org\", \"payload\", \"public\", \"repo\", \"type\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"org\" in attributes and attributes[ \"org\" ] is not None:\n+ if \"org\" in attributes and attributes[ \"org\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"org\" ], dict )\n self.__org = Organization.Organization( self.__requester, attributes[ \"org\" ], completion = LazyCompletion )\n- if \"payload\" in attributes and attributes[ \"payload\" ] is not None:\n+ if \"payload\" in attributes and attributes[ \"payload\" ] is not None: # pragma no branch\n self.__payload = attributes[ \"payload\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n self.__public = attributes[ \"public\" ]\n- if \"repo\" in attributes and attributes[ \"repo\" ] is not None:\n+ if \"repo\" in attributes and attributes[ \"repo\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repo\" ], dict )\n self.__repo = Repository.Repository( self.__requester, attributes[ \"repo\" ], completion = LazyCompletion )\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n self.__type = attributes[ \"type\" ]","status":"modified","deletions":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","changes":16,"additions":8,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","filename":"src/github/Event.py"},{"patch":"@@ -220,53 +220,53 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"comments\", \"created_at\", \"description\", \"files\", \"fork_of\", \"forks\", \"git_pull_url\", \"git_push_url\", \"history\", \"html_url\", \"id\", \"public\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], ( str, unicode ) )\n self.__description = attributes[ \"description\" ]\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n self.__files = attributes[ \"files\" ]\n- if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None:\n+ if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork_of\" ], dict )\n self.__fork_of = Gist( self.__requester, attributes[ \"fork_of\" ], completion = LazyCompletion )\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], list ) and ( len( attributes[ \"forks\" ] ) == 0 or isinstance( attributes[ \"forks\" ][ 0 ], dict ) )\n self.__forks = [\n Gist( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"forks\" ]\n ]\n- if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None:\n+ if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_pull_url\" ], ( str, unicode ) )\n self.__git_pull_url = attributes[ \"git_pull_url\" ]\n- if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None:\n+ if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_push_url\" ], ( str, unicode ) )\n self.__git_push_url = attributes[ \"git_push_url\" ]\n- if \"history\" in attributes and attributes[ \"history\" ] is not None:\n+ if \"history\" in attributes and attributes[ \"history\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"history\" ], list ) and ( len( attributes[ \"history\" ] ) == 0 or isinstance( attributes[ \"history\" ][ 0 ], dict ) )\n self.__history = [\n GistHistoryState.GistHistoryState( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"history\" ]\n ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], ( str, unicode ) )\n self.__id = attributes[ \"id\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public\" ], bool )\n self.__public = attributes[ \"public\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":15,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","changes":30,"additions":15,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","filename":"src/github/Gist.py"},{"patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","filename":"src/github/GistComment.py"},{"patch":"@@ -44,18 +44,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"change_status\", \"committed_at\", \"url\", \"user\", \"version\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None:\n+ if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"change_status\" ], dict )\n self.__change_status = CommitStats.CommitStats( self.__requester, attributes[ \"change_status\" ], completion = LazyCompletion )\n- if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None:\n+ if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committed_at\" ], ( str, unicode ) )\n self.__committed_at = attributes[ \"committed_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )\n- if \"version\" in attributes and attributes[ \"version\" ] is not None:\n+ if \"version\" in attributes and attributes[ \"version\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"version\" ], ( str, unicode ) )\n self.__version = attributes[ \"version\" ]","status":"modified","deletions":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","changes":10,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","filename":"src/github/GistHistoryState.py"},{"patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"date\", \"email\", \"name\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"date\" in attributes and attributes[ \"date\" ] is not None:\n+ if \"date\" in attributes and attributes[ \"date\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"date\" ], ( str, unicode ) )\n self.__date = attributes[ \"date\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","filename":"src/github/GitAuthor.py"},{"patch":"@@ -42,18 +42,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"content\", \"encoding\", \"sha\", \"size\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"content\" in attributes and attributes[ \"content\" ] is not None:\n+ if \"content\" in attributes and attributes[ \"content\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"content\" ], ( str, unicode ) )\n self.__content = attributes[ \"content\" ]\n- if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None:\n+ if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"encoding\" ], ( str, unicode ) )\n self.__encoding = attributes[ \"encoding\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","changes":10,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","filename":"src/github/GitBlob.py"},{"patch":"@@ -55,27 +55,27 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"committer\", \"message\", \"parents\", \"sha\", \"tree\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = GitAuthor.GitAuthor( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = GitAuthor.GitAuthor( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], ( str, unicode ) )\n self.__message = attributes[ \"message\" ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n GitCommit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], dict )\n self.__tree = GitTree.GitTree( self.__requester, attributes[ \"tree\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","changes":14,"additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","filename":"src/github/GitCommit.py"},{"patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","filename":"src/github/GitObject.py"},{"patch":"@@ -55,12 +55,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"object\", \"ref\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"ref\" in attributes and attributes[ \"ref\" ] is not None:\n+ if \"ref\" in attributes and attributes[ \"ref\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ref\" ], ( str, unicode ) )\n self.__ref = attributes[ \"ref\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","filename":"src/github/GitRef.py"},{"patch":"@@ -49,21 +49,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"message\", \"object\", \"sha\", \"tag\", \"tagger\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], ( str, unicode ) )\n self.__message = attributes[ \"message\" ]\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"tag\" in attributes and attributes[ \"tag\" ] is not None:\n+ if \"tag\" in attributes and attributes[ \"tag\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tag\" ], ( str, unicode ) )\n self.__tag = attributes[ \"tag\" ]\n- if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None:\n+ if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tagger\" ], dict )\n self.__tagger = GitAuthor.GitAuthor( self.__requester, attributes[ \"tagger\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","filename":"src/github/GitTag.py"},{"patch":"@@ -33,15 +33,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"tree\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], list ) and ( len( attributes[ \"tree\" ] ) == 0 or isinstance( attributes[ \"tree\" ][ 0 ], dict ) )\n self.__tree = [\n GitTreeElement.GitTreeElement( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"tree\" ]\n ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","filename":"src/github/GitTree.py"},{"patch":"@@ -47,21 +47,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"mode\", \"path\", \"sha\", \"size\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"mode\" in attributes and attributes[ \"mode\" ] is not None:\n+ if \"mode\" in attributes and attributes[ \"mode\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mode\" ], ( str, unicode ) )\n self.__mode = attributes[ \"mode\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], ( str, unicode ) )\n self.__path = attributes[ \"path\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","filename":"src/github/GitTreeElement.py"},{"patch":"@@ -99,21 +99,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"active\", \"config\", \"created_at\", \"events\", \"id\", \"last_response\", \"name\", \"updated_at\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"active\" in attributes and attributes[ \"active\" ] is not None:\n+ if \"active\" in attributes and attributes[ \"active\" ] is not None: # pragma no branch\n self.__active = attributes[ \"active\" ]\n- if \"config\" in attributes and attributes[ \"config\" ] is not None:\n+ if \"config\" in attributes and attributes[ \"config\" ] is not None: # pragma no branch\n self.__config = attributes[ \"config\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"events\" in attributes and attributes[ \"events\" ] is not None:\n+ if \"events\" in attributes and attributes[ \"events\" ] is not None: # pragma no branch\n self.__events = attributes[ \"events\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None:\n+ if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None: # pragma no branch\n self.__last_response = attributes[ \"last_response\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","changes":18,"additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","filename":"src/github/Hook.py"},{"patch":"@@ -110,7 +110,7 @@ def user( self ):\n return self.__user\n \n def add_to_labels( self, *labels ):\n- post_parameters = labels\n+ post_parameters = [ label.name for label in labels ]\n status, headers, data = self.__requester.request(\n \"POST\",\n str( self.url ) + \"/labels\",\n@@ -131,7 +131,12 @@ def create_comment( self, body ):\n return IssueComment.IssueComment( self.__requester, data, completion = NoCompletion )\n \n def delete_labels( self ):\n- pass\n+ status, headers, data = self.__requester.request(\n+ \"DELETE\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ None\n+ )\n \n def edit( self, title = DefaultValueForOptionalParameters, body = DefaultValueForOptionalParameters, assignee = DefaultValueForOptionalParameters, state = DefaultValueForOptionalParameters, milestone = DefaultValueForOptionalParameters, labels = DefaultValueForOptionalParameters ):\n post_parameters = {\n@@ -216,7 +221,13 @@ def remove_from_labels( self, label ):\n )\n \n def set_labels( self, *labels ):\n- pass\n+ post_parameters = [ label.name for label in labels ]\n+ status, headers, data = self.__requester.request(\n+ \"PUT\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ post_parameters\n+ )\n \n def __initAttributes( self ):\n self.__assignee = None\n@@ -257,59 +268,59 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"assignee\", \"body\", \"closed_at\", \"closed_by\", \"comments\", \"created_at\", \"html_url\", \"id\", \"labels\", \"milestone\", \"number\", \"pull_request\", \"repository\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None:\n+ if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"assignee\" ], dict )\n self.__assignee = NamedUser.NamedUser( self.__requester, attributes[ \"assignee\" ], completion = LazyCompletion )\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], ( str, unicode ) )\n self.__body = attributes[ \"body\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_at\" ], ( str, unicode ) )\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None:\n+ if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_by\" ], dict )\n self.__closed_by = NamedUser.NamedUser( self.__requester, attributes[ \"closed_by\" ], completion = LazyCompletion )\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"labels\" in attributes and attributes[ \"labels\" ] is not None:\n+ if \"labels\" in attributes and attributes[ \"labels\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"labels\" ], list ) and ( len( attributes[ \"labels\" ] ) == 0 or isinstance( attributes[ \"labels\" ][ 0 ], dict ) )\n self.__labels = [\n Label.Label( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"labels\" ]\n ]\n- if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None:\n+ if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"milestone\" ], dict )\n self.__milestone = Milestone.Milestone( self.__requester, attributes[ \"milestone\" ], completion = LazyCompletion )\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None:\n+ if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None: # pragma no branch\n self.__pull_request = attributes[ \"pull_request\" ]\n- if \"repository\" in attributes and attributes[ \"repository\" ] is not None:\n+ if \"repository\" in attributes and attributes[ \"repository\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repository\" ], dict )\n self.__repository = Repository.Repository( self.__requester, attributes[ \"repository\" ], completion = LazyCompletion )\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], ( str, unicode ) )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], ( str, unicode ) )\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":21,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","changes":53,"additions":32,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","filename":"src/github/Issue.py"},{"patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","filename":"src/github/IssueComment.py"},{"patch":"@@ -78,24 +78,24 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"commit_id\", \"created_at\", \"event\", \"id\", \"issue\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], ( str, unicode ) )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"event\" in attributes and attributes[ \"event\" ] is not None:\n+ if \"event\" in attributes and attributes[ \"event\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"event\" ], ( str, unicode ) )\n self.__event = attributes[ \"event\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"issue\" in attributes and attributes[ \"issue\" ] is not None:\n+ if \"issue\" in attributes and attributes[ \"issue\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"issue\" ], dict )\n self.__issue = Issue.Issue( self.__requester, attributes[ \"issue\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","changes":14,"additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","filename":"src/github/IssueEvent.py"},{"patch":"@@ -1,6 +1,8 @@\n # WARNING: this file is generated automaticaly.\n # Do not modify it manually, your work would be lost.\n \n+import urllib\n+\n import PaginatedList\n from GithubObject import *\n \n@@ -43,6 +45,11 @@ def edit( self, name, color ):\n )\n self.__useAttributes( data )\n \n+ # @toto Remove '_identity' from the normalized json description\n+ @property\n+ def _identity( self ):\n+ return urllib.quote( self.name )\n+\n def __initAttributes( self ):\n self.__color = None\n self.__name = None\n@@ -53,9 +60,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"color\", \"name\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"color\" in attributes and attributes[ \"color\" ] is not None:\n+ if \"color\" in attributes and attributes[ \"color\" ] is not None: # pragma no branch\n self.__color = attributes[ \"color\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","changes":13,"additions":10,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","filename":"src/github/Label.py"},{"patch":"@@ -114,36 +114,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"closed_issues\", \"created_at\", \"creator\", \"description\", \"due_on\", \"id\", \"number\", \"open_issues\", \"state\", \"title\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None:\n+ if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_issues\" ], int )\n self.__closed_issues = attributes[ \"closed_issues\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"creator\" in attributes and attributes[ \"creator\" ] is not None:\n+ if \"creator\" in attributes and attributes[ \"creator\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"creator\" ], dict )\n self.__creator = NamedUser.NamedUser( self.__requester, attributes[ \"creator\" ], completion = LazyCompletion )\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], ( str, unicode ) )\n self.__description = attributes[ \"description\" ]\n- if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None:\n+ if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"due_on\" ], ( str, unicode ) )\n self.__due_on = attributes[ \"due_on\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], ( str, unicode ) )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], ( str, unicode ) )\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","changes":22,"additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","filename":"src/github/Milestone.py"},{"patch":"@@ -365,81 +365,81 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"contributions\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], ( str, unicode ) )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], ( str, unicode ) )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], ( str, unicode ) )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], ( str, unicode ) )\n self.__company = attributes[ \"company\" ]\n- if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None:\n+ if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"contributions\" ], int )\n self.__contributions = attributes[ \"contributions\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], ( str, unicode ) )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], ( str, unicode ) )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], ( str, unicode ) )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":26,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","changes":52,"additions":26,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","filename":"src/github/NamedUser.py"},{"patch":"@@ -390,75 +390,75 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"billing_email\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], ( str, unicode ) )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None:\n+ if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"billing_email\" ], ( str, unicode ) )\n self.__billing_email = attributes[ \"billing_email\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], ( str, unicode ) )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], ( str, unicode ) )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], ( str, unicode ) )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], ( str, unicode ) )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], ( str, unicode ) )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":24,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","changes":48,"additions":24,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","filename":"src/github/Organization.py"},{"patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"admin\", \"pull\", \"push\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"admin\" in attributes and attributes[ \"admin\" ] is not None:\n+ if \"admin\" in attributes and attributes[ \"admin\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"admin\" ], bool )\n self.__admin = attributes[ \"admin\" ]\n- if \"pull\" in attributes and attributes[ \"pull\" ] is not None:\n+ if \"pull\" in attributes and attributes[ \"pull\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pull\" ], bool )\n self.__pull = attributes[ \"pull\" ]\n- if \"push\" in attributes and attributes[ \"push\" ] is not None:\n+ if \"push\" in attributes and attributes[ \"push\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"push\" ], bool )\n self.__push = attributes[ \"push\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","filename":"src/github/Permissions.py"},{"patch":"@@ -37,15 +37,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"collaborators\", \"name\", \"private_repos\", \"space\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None:\n+ if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_repos\" ], int )\n self.__private_repos = attributes[ \"private_repos\" ]\n- if \"space\" in attributes and attributes[ \"space\" ] is not None:\n+ if \"space\" in attributes and attributes[ \"space\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"space\" ], int )\n self.__space = attributes[ \"space\" ]","status":"modified","deletions":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","changes":8,"additions":4,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","filename":"src/github/Plan.py"},{"patch":"@@ -279,56 +279,56 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"base\", \"body\", \"changed_files\", \"closed_at\", \"comments\", \"commits\", \"created_at\", \"deletions\", \"diff_url\", \"head\", \"html_url\", \"id\", \"issue_url\", \"mergeable\", \"merged\", \"merged_at\", \"merged_by\", \"number\", \"patch_url\", \"review_comments\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"base\" in attributes and attributes[ \"base\" ] is not None:\n+ if \"base\" in attributes and attributes[ \"base\" ] is not None: # pragma no branch\n self.__base = attributes[ \"base\" ]\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None:\n+ if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None: # pragma no branch\n self.__changed_files = attributes[ \"changed_files\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n self.__comments = attributes[ \"comments\" ]\n- if \"commits\" in attributes and attributes[ \"commits\" ] is not None:\n+ if \"commits\" in attributes and attributes[ \"commits\" ] is not None: # pragma no branch\n self.__commits = attributes[ \"commits\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None:\n+ if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None: # pragma no branch\n self.__diff_url = attributes[ \"diff_url\" ]\n- if \"head\" in attributes and attributes[ \"head\" ] is not None:\n+ if \"head\" in attributes and attributes[ \"head\" ] is not None: # pragma no branch\n self.__head = attributes[ \"head\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None:\n+ if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None: # pragma no branch\n self.__issue_url = attributes[ \"issue_url\" ]\n- if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None:\n+ if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None: # pragma no branch\n self.__mergeable = attributes[ \"mergeable\" ]\n- if \"merged\" in attributes and attributes[ \"merged\" ] is not None:\n+ if \"merged\" in attributes and attributes[ \"merged\" ] is not None: # pragma no branch\n self.__merged = attributes[ \"merged\" ]\n- if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None:\n+ if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None: # pragma no branch\n self.__merged_at = attributes[ \"merged_at\" ]\n- if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None:\n+ if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None: # pragma no branch\n self.__merged_by = attributes[ \"merged_by\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n self.__number = attributes[ \"number\" ]\n- if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None:\n+ if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None: # pragma no branch\n self.__patch_url = attributes[ \"patch_url\" ]\n- if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None:\n+ if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None: # pragma no branch\n self.__review_comments = attributes[ \"review_comments\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":26,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","changes":52,"additions":26,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","filename":"src/github/PullRequest.py"},{"patch":"@@ -121,26 +121,26 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","changes":22,"additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","filename":"src/github/PullRequestComment.py"},{"patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]","status":"modified","deletions":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","changes":18,"additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","filename":"src/github/PullRequestFile.py"},{"patch":"@@ -905,96 +905,96 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"clone_url\", \"created_at\", \"description\", \"fork\", \"forks\", \"full_name\", \"git_url\", \"has_downloads\", \"has_issues\", \"has_wiki\", \"homepage\", \"html_url\", \"id\", \"language\", \"master_branch\", \"mirror_url\", \"name\", \"open_issues\", \"organization\", \"owner\", \"parent\", \"permissions\", \"private\", \"pushed_at\", \"size\", \"source\", \"ssh_url\", \"svn_url\", \"updated_at\", \"url\", \"watchers\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None:\n+ if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"clone_url\" ], ( str, unicode ) )\n self.__clone_url = attributes[ \"clone_url\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], ( str, unicode ) )\n self.__description = attributes[ \"description\" ]\n- if \"fork\" in attributes and attributes[ \"fork\" ] is not None:\n+ if \"fork\" in attributes and attributes[ \"fork\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork\" ], bool )\n self.__fork = attributes[ \"fork\" ]\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], int )\n self.__forks = attributes[ \"forks\" ]\n- if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None:\n+ if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"full_name\" ], ( str, unicode ) )\n self.__full_name = attributes[ \"full_name\" ]\n- if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None:\n+ if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_url\" ], ( str, unicode ) )\n self.__git_url = attributes[ \"git_url\" ]\n- if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None:\n+ if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_downloads\" ], bool )\n self.__has_downloads = attributes[ \"has_downloads\" ]\n- if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None:\n+ if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_issues\" ], bool )\n self.__has_issues = attributes[ \"has_issues\" ]\n- if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None:\n+ if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_wiki\" ], bool )\n self.__has_wiki = attributes[ \"has_wiki\" ]\n- if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None:\n+ if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"homepage\" ], ( str, unicode ) )\n self.__homepage = attributes[ \"homepage\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"language\" in attributes and attributes[ \"language\" ] is not None:\n+ if \"language\" in attributes and attributes[ \"language\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"language\" ], ( str, unicode ) )\n self.__language = attributes[ \"language\" ]\n- if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None:\n+ if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"master_branch\" ], ( str, unicode ) )\n self.__master_branch = attributes[ \"master_branch\" ]\n- if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None:\n+ if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mirror_url\" ], ( str, unicode ) )\n self.__mirror_url = attributes[ \"mirror_url\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"organization\" in attributes and attributes[ \"organization\" ] is not None:\n+ if \"organization\" in attributes and attributes[ \"organization\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"organization\" ], dict )\n self.__organization = Organization.Organization( self.__requester, attributes[ \"organization\" ], completion = LazyCompletion )\n- if \"owner\" in attributes and attributes[ \"owner\" ] is not None:\n+ if \"owner\" in attributes and attributes[ \"owner\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owner\" ], dict )\n self.__owner = NamedUser.NamedUser( self.__requester, attributes[ \"owner\" ], completion = LazyCompletion )\n- if \"parent\" in attributes and attributes[ \"parent\" ] is not None:\n+ if \"parent\" in attributes and attributes[ \"parent\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parent\" ], dict )\n self.__parent = Repository( self.__requester, attributes[ \"parent\" ], completion = LazyCompletion )\n- if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None:\n+ if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"permissions\" ], dict )\n self.__permissions = Permissions.Permissions( self.__requester, attributes[ \"permissions\" ], completion = LazyCompletion )\n- if \"private\" in attributes and attributes[ \"private\" ] is not None:\n+ if \"private\" in attributes and attributes[ \"private\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private\" ], bool )\n self.__private = attributes[ \"private\" ]\n- if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None:\n+ if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pushed_at\" ], ( str, unicode ) )\n self.__pushed_at = attributes[ \"pushed_at\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"source\" in attributes and attributes[ \"source\" ] is not None:\n+ if \"source\" in attributes and attributes[ \"source\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"source\" ], dict )\n self.__source = Repository( self.__requester, attributes[ \"source\" ], completion = LazyCompletion )\n- if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None:\n+ if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ssh_url\" ], ( str, unicode ) )\n self.__ssh_url = attributes[ \"ssh_url\" ]\n- if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None:\n+ if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"svn_url\" ], ( str, unicode ) )\n self.__svn_url = attributes[ \"svn_url\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None:\n+ if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"watchers\" ], int )\n self.__watchers = attributes[ \"watchers\" ]","status":"modified","deletions":31,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","changes":62,"additions":31,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","filename":"src/github/Repository.py"},{"patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]","status":"modified","deletions":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","changes":10,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","filename":"src/github/RepositoryKey.py"},{"patch":"@@ -38,15 +38,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", \"tarball_url\", \"zipball_url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None:\n+ if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tarball_url\" ], ( str, unicode ) )\n self.__tarball_url = attributes[ \"tarball_url\" ]\n- if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None:\n+ if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"zipball_url\" ], ( str, unicode ) )\n self.__zipball_url = attributes[ \"zipball_url\" ]","status":"modified","deletions":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","changes":8,"additions":4,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","filename":"src/github/Tag.py"},{"patch":"@@ -172,15 +172,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"members_count\", \"name\", \"permission\", \"repos_count\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None:\n+ if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None: # pragma no branch\n self.__members_count = attributes[ \"members_count\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"permission\" in attributes and attributes[ \"permission\" ] is not None:\n+ if \"permission\" in attributes and attributes[ \"permission\" ] is not None: # pragma no branch\n self.__permission = attributes[ \"permission\" ]\n- if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None:\n+ if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None: # pragma no branch\n self.__repos_count = attributes[ \"repos_count\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","filename":"src/github/Team.py"},{"patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]","status":"modified","deletions":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","changes":10,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","filename":"src/github/UserKey.py"},{"patch":"@@ -3,7 +3,8 @@\n class Issue( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.issue = self.g.get_user().get_repo( \"PyGithub\" ).get_issue( 28 )\r\n+ self.repo = self.g.get_user().get_repo( \"PyGithub\" )\r\n+ self.issue = self.repo.get_issue( 28 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.issue.assignee.login, \"jacquev6\" )\r\n@@ -47,3 +48,26 @@ def testGetComments( self ):\n \r\n def testGetEvents( self ):\r\n self.assertListKeyEqual( self.issue.get_events(), lambda e: e.id, [ 15819975, 15820048 ] )\r\n+\r\n+ def testGetLabels( self ):\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testAddAndRemoveLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( bug )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\" ] )\r\n+ self.issue.add_to_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testDeleteAndSetLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.delete_labels()\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [] )\r\n+ self.issue.set_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Question\" ] )\r","status":"modified","deletions":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","changes":26,"additions":25,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","filename":"test/Issue.py"},{"patch":"@@ -3,13 +3,13 @@\n class IssueEvent( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 15819975 )\r\n+ self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 16348656 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.event.actor.login, \"jacquev6\" )\r\n- self.assertEqual( self.event.commit_id, None )\r\n- self.assertEqual( self.event.created_at, \"2012-05-19T10:38:23Z\" )\r\n- self.assertEqual( self.event.event, \"subscribed\" )\r\n- self.assertEqual( self.event.id, 15819975 )\r\n- self.assertEqual( self.event.issue.number, 28 )\r\n- self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\" )\r\n+ self.assertEqual( self.event.commit_id, \"ed866fc43833802ab553e5ff8581c81bb00dd433\" )\r\n+ self.assertEqual( self.event.created_at, \"2012-05-27T07:29:25Z\" )\r\n+ self.assertEqual( self.event.event, \"referenced\" )\r\n+ self.assertEqual( self.event.id, 16348656 )\r\n+ self.assertEqual( self.event.issue.number, 30 )\r\n+ self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\" )\r","status":"modified","deletions":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","changes":14,"additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","filename":"test/IssueEvent.py"},{"patch":"@@ -0,0 +1,45 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4992'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"569c414d87e8ec43ec269a9e28bc2982\"'), ('date', 'Sun, 27 May 2012 09:04:01 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4991'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"b659c8dcc1212c71f826547c3cc7ae99\"'), ('date', 'Sun, 27 May 2012 09:04:02 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4990'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4989'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4986'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:05 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+POST /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4984'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","status":"added","deletions":0,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","changes":45,"additions":45,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","filename":"test/ReplayData/Issue.testAddAndRemoveLabels.txt"},{"patch":"@@ -0,0 +1,35 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4974'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fe2e942523eecb156d100829a6347516\"'), ('date', 'Sun, 27 May 2012 09:06:37 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4973'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"931e58d337b2290717303141eda89cd7\"'), ('date', 'Sun, 27 May 2012 09:06:38 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4972'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+204\n+[('status', '204 No Content'), ('x-ratelimit-remaining', '4971'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d41d8cd98f00b204e9800998ecf8427e\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT')]\n+\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4970'), ('content-length', '2'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d751713988987e9331980363e24189ce\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[]\n+\n+PUT /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4969'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4968'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:41 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","status":"added","deletions":0,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","changes":35,"additions":35,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","filename":"test/ReplayData/Issue.testDeleteAndSetLabels.txt"},{"patch":"@@ -0,0 +1,5 @@\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 08:56:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","status":"added","deletions":0,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","changes":5,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","filename":"test/ReplayData/Issue.testGetLabels.txt"},{"patch":"@@ -1,15 +1,15 @@\n GET /user {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4907'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"99c9bfb75395b749e9913a4729126fb5\"'), ('date', 'Sun, 27 May 2012 07:19:30 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"private_gists\":5,\"type\":\"User\",\"company\":\"Criteo\",\"location\":\"Paris, France\",\"hireable\":false,\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"bio\":\"\",\"following\":24,\"blog\":\"http://vincent-jacques.net\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"total_private_repos\":5,\"followers\":13,\"owned_private_repos\":5,\"disk_usage\":16976,\"collaborators\":0,\"html_url\":\"https://github.com/jacquev6\",\"url\":\"https://api.github.com/users/jacquev6\",\"name\":\"Vincent Jacques\",\"login\":\"jacquev6\",\"public_repos\":11,\"public_gists\":3,\"email\":\"vincent@vincent-jacques.net\",\"id\":327146,\"plan\":{\"private_repos\":5,\"collaborators\":1,\"name\":\"micro\",\"space\":614400},\"created_at\":\"2010-07-09T06:10:06Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"8974bb1628a3e3a6d3eb3b08c1b5a46b\"'), ('date', 'Sun, 27 May 2012 07:32:54 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"type\":\"User\",\"bio\":\"\",\"disk_usage\":16976,\"total_private_repos\":5,\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"owned_private_repos\":5,\"collaborators\":0,\"plan\":{\"collaborators\":1,\"private_repos\":5,\"name\":\"micro\",\"space\":614400},\"company\":\"Criteo\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"email\":\"vincent@vincent-jacques.net\",\"public_gists\":3,\"followers\":13,\"name\":\"Vincent Jacques\",\"created_at\":\"2010-07-09T06:10:06Z\",\"blog\":\"http://vincent-jacques.net\",\"location\":\"Paris, France\",\"hireable\":false,\"id\":327146,\"private_gists\":5,\"public_repos\":11,\"following\":24,\"html_url\":\"https://github.com/jacquev6\"}\n \n GET /repos/jacquev6/PyGithub {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4906'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"4c20acf0b23f75bbf25106b1a04f65a5\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"description\":\"Python library implementing the full Github API v3\",\"full_name\":\"jacquev6/PyGithub\",\"has_wiki\":false,\"has_issues\":true,\"updated_at\":\"2012-05-27T06:55:28Z\",\"forks\":3,\"mirror_url\":null,\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"open_issues\":16,\"fork\":false,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"size\":308,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"private\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"owner\":{\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"url\":\"https://api.github.com/users/jacquev6\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"has_downloads\":true,\"language\":\"Python\",\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"id\":3544490,\"permissions\":{\"admin\":true,\"pull\":true,\"push\":true},\"created_at\":\"2012-02-25T12:53:47Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4995'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"f1e4eb3993a364b66b68ec9db42405bd\"'), ('date', 'Sun, 27 May 2012 07:32:55 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"updated_at\":\"2012-05-27T07:29:24Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T07:29:24Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\n \n-GET /repos/jacquev6/PyGithub/issues/events/15819975 {'Authorization': 'Basic login_and_password_removed'} null\n+GET /repos/jacquev6/PyGithub/issues/events/16348656 {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4905'), ('content-length', '2430'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"a3d244842d23f92f69a23e21626fad11\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\",\"issue\":{\"updated_at\":\"2012-05-26T14:59:33Z\",\"body\":\"Body edited by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/28\",\"comments\":0,\"milestone\":{\"creator\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones/1\",\"number\":1,\"title\":\"Version 0.4\",\"due_on\":\"2012-03-13T07:00:00Z\",\"closed_issues\":3,\"open_issues\":0,\"created_at\":\"2012-03-08T12:22:10Z\",\"state\":\"closed\",\"description\":\"\",\"id\":93546},\"number\":28,\"assignee\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"closed_at\":\"2012-05-26T14:59:33Z\",\"title\":\"Issue created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-19T10:38:23Z\",\"state\":\"closed\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"id\":4653757,\"pull_request\":{\"diff_url\":null,\"patch_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/28\"},\"commit_id\":null,\"created_at\":\"2012-05-19T10:38:23Z\",\"event\":\"subscribed\",\"id\":15819975,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146}}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('content-length', '1384'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fefecab09e7355d4ef9875677c2631da\"'), ('date', 'Sun, 27 May 2012 07:32:56 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\",\"issue\":{\"updated_at\":\"2012-05-27T07:27:51Z\",\"body\":\"Body created by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/30\",\"comments\":0,\"milestone\":null,\"number\":30,\"assignee\":null,\"closed_at\":null,\"title\":\"Issue also created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-27T05:40:15Z\",\"state\":\"open\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"},\"id\":4769659,\"pull_request\":{\"patch_url\":null,\"diff_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/30\"},\"commit_id\":\"ed866fc43833802ab553e5ff8581c81bb00dd433\",\"created_at\":\"2012-05-27T07:29:25Z\",\"event\":\"referenced\",\"id\":16348656,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"}}\n ","status":"modified","deletions":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","changes":14,"additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","filename":"test/ReplayData/IssueEvent.setUp.txt"}] +[{"patch":"@@ -70,7 +70,7 @@ def __useAttributes( self, attributes ):\n \n # @toto No need to check if attribute is in attributes when attribute is mandatory\n {% for attribute in class.attributes|dictsort:\"name\" %}\n- if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None:\n+ if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None: # pragma no branch\n \n {% if attribute.type.cardinality == \"scalar\" %}\n {% if attribute.type.simple %}","status":"modified","deletions":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","changes":2,"additions":1,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","filename":"codegen/templates/GithubObject.py"},{"patch":"@@ -568,78 +568,78 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], str )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], str )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], str )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], str )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], str )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], str )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], str )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":25,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","changes":50,"additions":25,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","filename":"src/github/AuthenticatedUser.py"},{"patch":"@@ -117,21 +117,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"app\", \"created_at\", \"id\", \"note\", \"note_url\", \"scopes\", \"token\", \"updated_at\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"app\" in attributes and attributes[ \"app\" ] is not None:\n+ if \"app\" in attributes and attributes[ \"app\" ] is not None: # pragma no branch\n self.__app = attributes[ \"app\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"note\" in attributes and attributes[ \"note\" ] is not None:\n+ if \"note\" in attributes and attributes[ \"note\" ] is not None: # pragma no branch\n self.__note = attributes[ \"note\" ]\n- if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None:\n+ if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None: # pragma no branch\n self.__note_url = attributes[ \"note_url\" ]\n- if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None:\n+ if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None: # pragma no branch\n self.__scopes = attributes[ \"scopes\" ]\n- if \"token\" in attributes and attributes[ \"token\" ] is not None:\n+ if \"token\" in attributes and attributes[ \"token\" ] is not None: # pragma no branch\n self.__token = attributes[ \"token\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","changes":18,"additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","filename":"src/github/Authorization.py"},{"patch":"@@ -28,9 +28,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]","status":"modified","deletions":2,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","changes":4,"additions":2,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","filename":"src/github/Branch.py"},{"patch":"@@ -120,33 +120,33 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"commit\", \"committer\", \"files\", \"parents\", \"sha\", \"stats\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = NamedUser.NamedUser( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = GitCommit.GitCommit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = NamedUser.NamedUser( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"files\" ], list ) and ( len( attributes[ \"files\" ] ) == 0 or isinstance( attributes[ \"files\" ][ 0 ], dict ) )\n self.__files = [\n CommitFile.CommitFile( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"files\" ]\n ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n Commit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"stats\" in attributes and attributes[ \"stats\" ] is not None:\n+ if \"stats\" in attributes and attributes[ \"stats\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"stats\" ], dict )\n self.__stats = CommitStats.CommitStats( self.__requester, attributes[ \"stats\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","changes":16,"additions":8,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","filename":"src/github/Commit.py"},{"patch":"@@ -121,36 +121,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], str )\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], str )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"line\" ], int )\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], str )\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"position\" ], int )\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","changes":22,"additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","filename":"src/github/CommitComment.py"},{"patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]","status":"modified","deletions":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","changes":18,"additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","filename":"src/github/CommitFile.py"},{"patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"deletions\", \"total\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"additions\" ], int )\n self.__additions = attributes[ \"additions\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"deletions\" ], int )\n self.__deletions = attributes[ \"deletions\" ]\n- if \"total\" in attributes and attributes[ \"total\" ] is not None:\n+ if \"total\" in attributes and attributes[ \"total\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total\" ], int )\n self.__total = attributes[ \"total\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","filename":"src/github/CommitStats.py"},{"patch":"@@ -162,43 +162,43 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"accesskeyid\", \"acl\", \"bucket\", \"content_type\", \"created_at\", \"description\", \"download_count\", \"expirationdate\", \"html_url\", \"id\", \"mime_type\", \"name\", \"path\", \"policy\", \"prefix\", \"redirect\", \"s3_url\", \"signature\", \"size\", \"url\", \"x-amz-meta-content-disposition\" ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None:\n+ if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None: # pragma no branch\n self.__accesskeyid = attributes[ \"accesskeyid\" ]\n- if \"acl\" in attributes and attributes[ \"acl\" ] is not None:\n+ if \"acl\" in attributes and attributes[ \"acl\" ] is not None: # pragma no branch\n self.__acl = attributes[ \"acl\" ]\n- if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None:\n+ if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None: # pragma no branch\n self.__bucket = attributes[ \"bucket\" ]\n- if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None:\n+ if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None: # pragma no branch\n self.__content_type = attributes[ \"content_type\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n self.__description = attributes[ \"description\" ]\n- if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None:\n+ if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None: # pragma no branch\n self.__download_count = attributes[ \"download_count\" ]\n- if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None:\n+ if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None: # pragma no branch\n self.__expirationdate = attributes[ \"expirationdate\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None:\n+ if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None: # pragma no branch\n self.__mime_type = attributes[ \"mime_type\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"policy\" in attributes and attributes[ \"policy\" ] is not None:\n+ if \"policy\" in attributes and attributes[ \"policy\" ] is not None: # pragma no branch\n self.__policy = attributes[ \"policy\" ]\n- if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None:\n+ if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None: # pragma no branch\n self.__prefix = attributes[ \"prefix\" ]\n- if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None:\n+ if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None: # pragma no branch\n self.__redirect = attributes[ \"redirect\" ]\n- if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None:\n+ if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None: # pragma no branch\n self.__s3_url = attributes[ \"s3_url\" ]\n- if \"signature\" in attributes and attributes[ \"signature\" ] is not None:\n+ if \"signature\" in attributes and attributes[ \"signature\" ] is not None: # pragma no branch\n self.__signature = attributes[ \"signature\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":20,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","changes":40,"additions":20,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","filename":"src/github/Download.py"},{"patch":"@@ -60,22 +60,22 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"created_at\", \"id\", \"org\", \"payload\", \"public\", \"repo\", \"type\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"org\" in attributes and attributes[ \"org\" ] is not None:\n+ if \"org\" in attributes and attributes[ \"org\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"org\" ], dict )\n self.__org = Organization.Organization( self.__requester, attributes[ \"org\" ], completion = LazyCompletion )\n- if \"payload\" in attributes and attributes[ \"payload\" ] is not None:\n+ if \"payload\" in attributes and attributes[ \"payload\" ] is not None: # pragma no branch\n self.__payload = attributes[ \"payload\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n self.__public = attributes[ \"public\" ]\n- if \"repo\" in attributes and attributes[ \"repo\" ] is not None:\n+ if \"repo\" in attributes and attributes[ \"repo\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repo\" ], dict )\n self.__repo = Repository.Repository( self.__requester, attributes[ \"repo\" ], completion = LazyCompletion )\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n self.__type = attributes[ \"type\" ]","status":"modified","deletions":8,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","changes":16,"additions":8,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","filename":"src/github/Event.py"},{"patch":"@@ -220,53 +220,53 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"comments\", \"created_at\", \"description\", \"files\", \"fork_of\", \"forks\", \"git_pull_url\", \"git_push_url\", \"history\", \"html_url\", \"id\", \"public\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], str )\n self.__description = attributes[ \"description\" ]\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n self.__files = attributes[ \"files\" ]\n- if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None:\n+ if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork_of\" ], dict )\n self.__fork_of = Gist( self.__requester, attributes[ \"fork_of\" ], completion = LazyCompletion )\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], list ) and ( len( attributes[ \"forks\" ] ) == 0 or isinstance( attributes[ \"forks\" ][ 0 ], dict ) )\n self.__forks = [\n Gist( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"forks\" ]\n ]\n- if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None:\n+ if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_pull_url\" ], str )\n self.__git_pull_url = attributes[ \"git_pull_url\" ]\n- if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None:\n+ if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_push_url\" ], str )\n self.__git_push_url = attributes[ \"git_push_url\" ]\n- if \"history\" in attributes and attributes[ \"history\" ] is not None:\n+ if \"history\" in attributes and attributes[ \"history\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"history\" ], list ) and ( len( attributes[ \"history\" ] ) == 0 or isinstance( attributes[ \"history\" ][ 0 ], dict ) )\n self.__history = [\n GistHistoryState.GistHistoryState( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"history\" ]\n ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], str )\n self.__id = attributes[ \"id\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public\" ], bool )\n self.__public = attributes[ \"public\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":15,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","changes":30,"additions":15,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","filename":"src/github/Gist.py"},{"patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","filename":"src/github/GistComment.py"},{"patch":"@@ -44,18 +44,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"change_status\", \"committed_at\", \"url\", \"user\", \"version\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None:\n+ if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"change_status\" ], dict )\n self.__change_status = CommitStats.CommitStats( self.__requester, attributes[ \"change_status\" ], completion = LazyCompletion )\n- if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None:\n+ if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committed_at\" ], str )\n self.__committed_at = attributes[ \"committed_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )\n- if \"version\" in attributes and attributes[ \"version\" ] is not None:\n+ if \"version\" in attributes and attributes[ \"version\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"version\" ], str )\n self.__version = attributes[ \"version\" ]","status":"modified","deletions":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","changes":10,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","filename":"src/github/GistHistoryState.py"},{"patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"date\", \"email\", \"name\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"date\" in attributes and attributes[ \"date\" ] is not None:\n+ if \"date\" in attributes and attributes[ \"date\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"date\" ], str )\n self.__date = attributes[ \"date\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","filename":"src/github/GitAuthor.py"},{"patch":"@@ -42,18 +42,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"content\", \"encoding\", \"sha\", \"size\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"content\" in attributes and attributes[ \"content\" ] is not None:\n+ if \"content\" in attributes and attributes[ \"content\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"content\" ], str )\n self.__content = attributes[ \"content\" ]\n- if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None:\n+ if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"encoding\" ], str )\n self.__encoding = attributes[ \"encoding\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","changes":10,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","filename":"src/github/GitBlob.py"},{"patch":"@@ -55,27 +55,27 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"committer\", \"message\", \"parents\", \"sha\", \"tree\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = GitAuthor.GitAuthor( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = GitAuthor.GitAuthor( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], str )\n self.__message = attributes[ \"message\" ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n GitCommit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], dict )\n self.__tree = GitTree.GitTree( self.__requester, attributes[ \"tree\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","changes":14,"additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","filename":"src/github/GitCommit.py"},{"patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","filename":"src/github/GitObject.py"},{"patch":"@@ -55,12 +55,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"object\", \"ref\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"ref\" in attributes and attributes[ \"ref\" ] is not None:\n+ if \"ref\" in attributes and attributes[ \"ref\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ref\" ], str )\n self.__ref = attributes[ \"ref\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","filename":"src/github/GitRef.py"},{"patch":"@@ -49,21 +49,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"message\", \"object\", \"sha\", \"tag\", \"tagger\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], str )\n self.__message = attributes[ \"message\" ]\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"tag\" in attributes and attributes[ \"tag\" ] is not None:\n+ if \"tag\" in attributes and attributes[ \"tag\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tag\" ], str )\n self.__tag = attributes[ \"tag\" ]\n- if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None:\n+ if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tagger\" ], dict )\n self.__tagger = GitAuthor.GitAuthor( self.__requester, attributes[ \"tagger\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","filename":"src/github/GitTag.py"},{"patch":"@@ -33,15 +33,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"tree\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], list ) and ( len( attributes[ \"tree\" ] ) == 0 or isinstance( attributes[ \"tree\" ][ 0 ], dict ) )\n self.__tree = [\n GitTreeElement.GitTreeElement( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"tree\" ]\n ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","filename":"src/github/GitTree.py"},{"patch":"@@ -47,21 +47,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"mode\", \"path\", \"sha\", \"size\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"mode\" in attributes and attributes[ \"mode\" ] is not None:\n+ if \"mode\" in attributes and attributes[ \"mode\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mode\" ], str )\n self.__mode = attributes[ \"mode\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], str )\n self.__path = attributes[ \"path\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","filename":"src/github/GitTreeElement.py"},{"patch":"@@ -99,21 +99,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"active\", \"config\", \"created_at\", \"events\", \"id\", \"last_response\", \"name\", \"updated_at\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"active\" in attributes and attributes[ \"active\" ] is not None:\n+ if \"active\" in attributes and attributes[ \"active\" ] is not None: # pragma no branch\n self.__active = attributes[ \"active\" ]\n- if \"config\" in attributes and attributes[ \"config\" ] is not None:\n+ if \"config\" in attributes and attributes[ \"config\" ] is not None: # pragma no branch\n self.__config = attributes[ \"config\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"events\" in attributes and attributes[ \"events\" ] is not None:\n+ if \"events\" in attributes and attributes[ \"events\" ] is not None: # pragma no branch\n self.__events = attributes[ \"events\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None:\n+ if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None: # pragma no branch\n self.__last_response = attributes[ \"last_response\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","changes":18,"additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","filename":"src/github/Hook.py"},{"patch":"@@ -110,7 +110,7 @@ def user( self ):\n return self.__user\n \n def add_to_labels( self, *labels ):\n- post_parameters = labels\n+ post_parameters = [ label.name for label in labels ]\n status, headers, data = self.__requester.request(\n \"POST\",\n str( self.url ) + \"/labels\",\n@@ -131,7 +131,12 @@ def create_comment( self, body ):\n return IssueComment.IssueComment( self.__requester, data, completion = NoCompletion )\n \n def delete_labels( self ):\n- pass\n+ status, headers, data = self.__requester.request(\n+ \"DELETE\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ None\n+ )\n \n def edit( self, title = DefaultValueForOptionalParameters, body = DefaultValueForOptionalParameters, assignee = DefaultValueForOptionalParameters, state = DefaultValueForOptionalParameters, milestone = DefaultValueForOptionalParameters, labels = DefaultValueForOptionalParameters ):\n post_parameters = {\n@@ -216,7 +221,13 @@ def remove_from_labels( self, label ):\n )\n \n def set_labels( self, *labels ):\n- pass\n+ post_parameters = [ label.name for label in labels ]\n+ status, headers, data = self.__requester.request(\n+ \"PUT\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ post_parameters\n+ )\n \n def __initAttributes( self ):\n self.__assignee = None\n@@ -257,59 +268,59 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"assignee\", \"body\", \"closed_at\", \"closed_by\", \"comments\", \"created_at\", \"html_url\", \"id\", \"labels\", \"milestone\", \"number\", \"pull_request\", \"repository\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None:\n+ if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"assignee\" ], dict )\n self.__assignee = NamedUser.NamedUser( self.__requester, attributes[ \"assignee\" ], completion = LazyCompletion )\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], str )\n self.__body = attributes[ \"body\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_at\" ], str )\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None:\n+ if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_by\" ], dict )\n self.__closed_by = NamedUser.NamedUser( self.__requester, attributes[ \"closed_by\" ], completion = LazyCompletion )\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"labels\" in attributes and attributes[ \"labels\" ] is not None:\n+ if \"labels\" in attributes and attributes[ \"labels\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"labels\" ], list ) and ( len( attributes[ \"labels\" ] ) == 0 or isinstance( attributes[ \"labels\" ][ 0 ], dict ) )\n self.__labels = [\n Label.Label( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"labels\" ]\n ]\n- if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None:\n+ if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"milestone\" ], dict )\n self.__milestone = Milestone.Milestone( self.__requester, attributes[ \"milestone\" ], completion = LazyCompletion )\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None:\n+ if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None: # pragma no branch\n self.__pull_request = attributes[ \"pull_request\" ]\n- if \"repository\" in attributes and attributes[ \"repository\" ] is not None:\n+ if \"repository\" in attributes and attributes[ \"repository\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repository\" ], dict )\n self.__repository = Repository.Repository( self.__requester, attributes[ \"repository\" ], completion = LazyCompletion )\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], str )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], str )\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":21,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","changes":53,"additions":32,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","filename":"src/github/Issue.py"},{"patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","filename":"src/github/IssueComment.py"},{"patch":"@@ -78,24 +78,24 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"commit_id\", \"created_at\", \"event\", \"id\", \"issue\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], str )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"event\" in attributes and attributes[ \"event\" ] is not None:\n+ if \"event\" in attributes and attributes[ \"event\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"event\" ], str )\n self.__event = attributes[ \"event\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"issue\" in attributes and attributes[ \"issue\" ] is not None:\n+ if \"issue\" in attributes and attributes[ \"issue\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"issue\" ], dict )\n self.__issue = Issue.Issue( self.__requester, attributes[ \"issue\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","changes":14,"additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","filename":"src/github/IssueEvent.py"},{"patch":"@@ -1,6 +1,8 @@\n # WARNING: this file is generated automaticaly.\n # Do not modify it manually, your work would be lost.\n \n+import urllib\n+\n import PaginatedList\n from GithubObject import *\n \n@@ -43,6 +45,11 @@ def edit( self, name, color ):\n )\n self.__useAttributes( data )\n \n+ # @toto Remove '_identity' from the normalized json description\n+ @property\n+ def _identity( self ):\n+ return urllib.quote( self.name )\n+\n def __initAttributes( self ):\n self.__color = None\n self.__name = None\n@@ -53,9 +60,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"color\", \"name\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"color\" in attributes and attributes[ \"color\" ] is not None:\n+ if \"color\" in attributes and attributes[ \"color\" ] is not None: # pragma no branch\n self.__color = attributes[ \"color\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","changes":13,"additions":10,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","filename":"src/github/Label.py"},{"patch":"@@ -114,36 +114,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"closed_issues\", \"created_at\", \"creator\", \"description\", \"due_on\", \"id\", \"number\", \"open_issues\", \"state\", \"title\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None:\n+ if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_issues\" ], int )\n self.__closed_issues = attributes[ \"closed_issues\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"creator\" in attributes and attributes[ \"creator\" ] is not None:\n+ if \"creator\" in attributes and attributes[ \"creator\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"creator\" ], dict )\n self.__creator = NamedUser.NamedUser( self.__requester, attributes[ \"creator\" ], completion = LazyCompletion )\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], str )\n self.__description = attributes[ \"description\" ]\n- if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None:\n+ if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"due_on\" ], str )\n self.__due_on = attributes[ \"due_on\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], str )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], str )\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","changes":22,"additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","filename":"src/github/Milestone.py"},{"patch":"@@ -365,81 +365,81 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"contributions\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], str )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], str )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], str )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], str )\n self.__company = attributes[ \"company\" ]\n- if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None:\n+ if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"contributions\" ], int )\n self.__contributions = attributes[ \"contributions\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], str )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], str )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], str )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":26,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","changes":52,"additions":26,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","filename":"src/github/NamedUser.py"},{"patch":"@@ -390,75 +390,75 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"billing_email\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], str )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None:\n+ if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"billing_email\" ], str )\n self.__billing_email = attributes[ \"billing_email\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], str )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], str )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], str )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], str )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], str )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":24,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","changes":48,"additions":24,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","filename":"src/github/Organization.py"},{"patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"admin\", \"pull\", \"push\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"admin\" in attributes and attributes[ \"admin\" ] is not None:\n+ if \"admin\" in attributes and attributes[ \"admin\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"admin\" ], bool )\n self.__admin = attributes[ \"admin\" ]\n- if \"pull\" in attributes and attributes[ \"pull\" ] is not None:\n+ if \"pull\" in attributes and attributes[ \"pull\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pull\" ], bool )\n self.__pull = attributes[ \"pull\" ]\n- if \"push\" in attributes and attributes[ \"push\" ] is not None:\n+ if \"push\" in attributes and attributes[ \"push\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"push\" ], bool )\n self.__push = attributes[ \"push\" ]","status":"modified","deletions":3,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","changes":6,"additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","filename":"src/github/Permissions.py"},{"patch":"@@ -37,15 +37,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"collaborators\", \"name\", \"private_repos\", \"space\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None:\n+ if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_repos\" ], int )\n self.__private_repos = attributes[ \"private_repos\" ]\n- if \"space\" in attributes and attributes[ \"space\" ] is not None:\n+ if \"space\" in attributes and attributes[ \"space\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"space\" ], int )\n self.__space = attributes[ \"space\" ]","status":"modified","deletions":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","changes":8,"additions":4,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","filename":"src/github/Plan.py"},{"patch":"@@ -279,56 +279,56 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"base\", \"body\", \"changed_files\", \"closed_at\", \"comments\", \"commits\", \"created_at\", \"deletions\", \"diff_url\", \"head\", \"html_url\", \"id\", \"issue_url\", \"mergeable\", \"merged\", \"merged_at\", \"merged_by\", \"number\", \"patch_url\", \"review_comments\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"base\" in attributes and attributes[ \"base\" ] is not None:\n+ if \"base\" in attributes and attributes[ \"base\" ] is not None: # pragma no branch\n self.__base = attributes[ \"base\" ]\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None:\n+ if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None: # pragma no branch\n self.__changed_files = attributes[ \"changed_files\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n self.__comments = attributes[ \"comments\" ]\n- if \"commits\" in attributes and attributes[ \"commits\" ] is not None:\n+ if \"commits\" in attributes and attributes[ \"commits\" ] is not None: # pragma no branch\n self.__commits = attributes[ \"commits\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None:\n+ if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None: # pragma no branch\n self.__diff_url = attributes[ \"diff_url\" ]\n- if \"head\" in attributes and attributes[ \"head\" ] is not None:\n+ if \"head\" in attributes and attributes[ \"head\" ] is not None: # pragma no branch\n self.__head = attributes[ \"head\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None:\n+ if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None: # pragma no branch\n self.__issue_url = attributes[ \"issue_url\" ]\n- if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None:\n+ if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None: # pragma no branch\n self.__mergeable = attributes[ \"mergeable\" ]\n- if \"merged\" in attributes and attributes[ \"merged\" ] is not None:\n+ if \"merged\" in attributes and attributes[ \"merged\" ] is not None: # pragma no branch\n self.__merged = attributes[ \"merged\" ]\n- if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None:\n+ if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None: # pragma no branch\n self.__merged_at = attributes[ \"merged_at\" ]\n- if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None:\n+ if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None: # pragma no branch\n self.__merged_by = attributes[ \"merged_by\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n self.__number = attributes[ \"number\" ]\n- if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None:\n+ if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None: # pragma no branch\n self.__patch_url = attributes[ \"patch_url\" ]\n- if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None:\n+ if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None: # pragma no branch\n self.__review_comments = attributes[ \"review_comments\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":26,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","changes":52,"additions":26,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","filename":"src/github/PullRequest.py"},{"patch":"@@ -121,26 +121,26 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","status":"modified","deletions":11,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","changes":22,"additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","filename":"src/github/PullRequestComment.py"},{"patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]","status":"modified","deletions":9,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","changes":18,"additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","filename":"src/github/PullRequestFile.py"},{"patch":"@@ -905,96 +905,96 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"clone_url\", \"created_at\", \"description\", \"fork\", \"forks\", \"full_name\", \"git_url\", \"has_downloads\", \"has_issues\", \"has_wiki\", \"homepage\", \"html_url\", \"id\", \"language\", \"master_branch\", \"mirror_url\", \"name\", \"open_issues\", \"organization\", \"owner\", \"parent\", \"permissions\", \"private\", \"pushed_at\", \"size\", \"source\", \"ssh_url\", \"svn_url\", \"updated_at\", \"url\", \"watchers\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None:\n+ if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"clone_url\" ], str )\n self.__clone_url = attributes[ \"clone_url\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], str )\n self.__description = attributes[ \"description\" ]\n- if \"fork\" in attributes and attributes[ \"fork\" ] is not None:\n+ if \"fork\" in attributes and attributes[ \"fork\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork\" ], bool )\n self.__fork = attributes[ \"fork\" ]\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], int )\n self.__forks = attributes[ \"forks\" ]\n- if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None:\n+ if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"full_name\" ], str )\n self.__full_name = attributes[ \"full_name\" ]\n- if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None:\n+ if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_url\" ], str )\n self.__git_url = attributes[ \"git_url\" ]\n- if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None:\n+ if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_downloads\" ], bool )\n self.__has_downloads = attributes[ \"has_downloads\" ]\n- if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None:\n+ if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_issues\" ], bool )\n self.__has_issues = attributes[ \"has_issues\" ]\n- if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None:\n+ if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_wiki\" ], bool )\n self.__has_wiki = attributes[ \"has_wiki\" ]\n- if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None:\n+ if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"homepage\" ], str )\n self.__homepage = attributes[ \"homepage\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"language\" in attributes and attributes[ \"language\" ] is not None:\n+ if \"language\" in attributes and attributes[ \"language\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"language\" ], str )\n self.__language = attributes[ \"language\" ]\n- if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None:\n+ if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"master_branch\" ], str )\n self.__master_branch = attributes[ \"master_branch\" ]\n- if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None:\n+ if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mirror_url\" ], str )\n self.__mirror_url = attributes[ \"mirror_url\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"organization\" in attributes and attributes[ \"organization\" ] is not None:\n+ if \"organization\" in attributes and attributes[ \"organization\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"organization\" ], dict )\n self.__organization = Organization.Organization( self.__requester, attributes[ \"organization\" ], completion = LazyCompletion )\n- if \"owner\" in attributes and attributes[ \"owner\" ] is not None:\n+ if \"owner\" in attributes and attributes[ \"owner\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owner\" ], dict )\n self.__owner = NamedUser.NamedUser( self.__requester, attributes[ \"owner\" ], completion = LazyCompletion )\n- if \"parent\" in attributes and attributes[ \"parent\" ] is not None:\n+ if \"parent\" in attributes and attributes[ \"parent\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parent\" ], dict )\n self.__parent = Repository( self.__requester, attributes[ \"parent\" ], completion = LazyCompletion )\n- if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None:\n+ if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"permissions\" ], dict )\n self.__permissions = Permissions.Permissions( self.__requester, attributes[ \"permissions\" ], completion = LazyCompletion )\n- if \"private\" in attributes and attributes[ \"private\" ] is not None:\n+ if \"private\" in attributes and attributes[ \"private\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private\" ], bool )\n self.__private = attributes[ \"private\" ]\n- if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None:\n+ if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pushed_at\" ], str )\n self.__pushed_at = attributes[ \"pushed_at\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"source\" in attributes and attributes[ \"source\" ] is not None:\n+ if \"source\" in attributes and attributes[ \"source\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"source\" ], dict )\n self.__source = Repository( self.__requester, attributes[ \"source\" ], completion = LazyCompletion )\n- if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None:\n+ if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ssh_url\" ], str )\n self.__ssh_url = attributes[ \"ssh_url\" ]\n- if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None:\n+ if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"svn_url\" ], str )\n self.__svn_url = attributes[ \"svn_url\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None:\n+ if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"watchers\" ], int )\n self.__watchers = attributes[ \"watchers\" ]","status":"modified","deletions":31,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","changes":62,"additions":31,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","filename":"src/github/Repository.py"},{"patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]","status":"modified","deletions":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","changes":10,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","filename":"src/github/RepositoryKey.py"},{"patch":"@@ -38,15 +38,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", \"tarball_url\", \"zipball_url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None:\n+ if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tarball_url\" ], str )\n self.__tarball_url = attributes[ \"tarball_url\" ]\n- if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None:\n+ if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"zipball_url\" ], str )\n self.__zipball_url = attributes[ \"zipball_url\" ]","status":"modified","deletions":4,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","changes":8,"additions":4,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","filename":"src/github/Tag.py"},{"patch":"@@ -172,15 +172,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"members_count\", \"name\", \"permission\", \"repos_count\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None:\n+ if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None: # pragma no branch\n self.__members_count = attributes[ \"members_count\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"permission\" in attributes and attributes[ \"permission\" ] is not None:\n+ if \"permission\" in attributes and attributes[ \"permission\" ] is not None: # pragma no branch\n self.__permission = attributes[ \"permission\" ]\n- if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None:\n+ if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None: # pragma no branch\n self.__repos_count = attributes[ \"repos_count\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","status":"modified","deletions":6,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","changes":12,"additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","filename":"src/github/Team.py"},{"patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]","status":"modified","deletions":5,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","changes":10,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","filename":"src/github/UserKey.py"},{"patch":"@@ -3,7 +3,8 @@\n class Issue( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.issue = self.g.get_user().get_repo( \"PyGithub\" ).get_issue( 28 )\r\n+ self.repo = self.g.get_user().get_repo( \"PyGithub\" )\r\n+ self.issue = self.repo.get_issue( 28 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.issue.assignee.login, \"jacquev6\" )\r\n@@ -47,3 +48,26 @@ def testGetComments( self ):\n \r\n def testGetEvents( self ):\r\n self.assertListKeyEqual( self.issue.get_events(), lambda e: e.id, [ 15819975, 15820048 ] )\r\n+\r\n+ def testGetLabels( self ):\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testAddAndRemoveLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( bug )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\" ] )\r\n+ self.issue.add_to_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testDeleteAndSetLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.delete_labels()\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [] )\r\n+ self.issue.set_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Question\" ] )\r","status":"modified","deletions":1,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","changes":26,"additions":25,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","filename":"test/Issue.py"},{"patch":"@@ -3,13 +3,13 @@\n class IssueEvent( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 15819975 )\r\n+ self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 16348656 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.event.actor.login, \"jacquev6\" )\r\n- self.assertEqual( self.event.commit_id, None )\r\n- self.assertEqual( self.event.created_at, \"2012-05-19T10:38:23Z\" )\r\n- self.assertEqual( self.event.event, \"subscribed\" )\r\n- self.assertEqual( self.event.id, 15819975 )\r\n- self.assertEqual( self.event.issue.number, 28 )\r\n- self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\" )\r\n+ self.assertEqual( self.event.commit_id, \"ed866fc43833802ab553e5ff8581c81bb00dd433\" )\r\n+ self.assertEqual( self.event.created_at, \"2012-05-27T07:29:25Z\" )\r\n+ self.assertEqual( self.event.event, \"referenced\" )\r\n+ self.assertEqual( self.event.id, 16348656 )\r\n+ self.assertEqual( self.event.issue.number, 30 )\r\n+ self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\" )\r","status":"modified","deletions":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","changes":14,"additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","filename":"test/IssueEvent.py"},{"patch":"@@ -0,0 +1,45 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4992'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"569c414d87e8ec43ec269a9e28bc2982\"'), ('date', 'Sun, 27 May 2012 09:04:01 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4991'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"b659c8dcc1212c71f826547c3cc7ae99\"'), ('date', 'Sun, 27 May 2012 09:04:02 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4990'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4989'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4986'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:05 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+POST /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4984'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","status":"added","deletions":0,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","changes":45,"additions":45,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","filename":"test/ReplayData/Issue.testAddAndRemoveLabels.txt"},{"patch":"@@ -0,0 +1,35 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4974'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fe2e942523eecb156d100829a6347516\"'), ('date', 'Sun, 27 May 2012 09:06:37 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4973'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"931e58d337b2290717303141eda89cd7\"'), ('date', 'Sun, 27 May 2012 09:06:38 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4972'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+204\n+[('status', '204 No Content'), ('x-ratelimit-remaining', '4971'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d41d8cd98f00b204e9800998ecf8427e\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT')]\n+\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4970'), ('content-length', '2'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d751713988987e9331980363e24189ce\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[]\n+\n+PUT /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4969'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4968'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:41 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","status":"added","deletions":0,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","changes":35,"additions":35,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","filename":"test/ReplayData/Issue.testDeleteAndSetLabels.txt"},{"patch":"@@ -0,0 +1,5 @@\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 08:56:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","status":"added","deletions":0,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","changes":5,"additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","filename":"test/ReplayData/Issue.testGetLabels.txt"},{"patch":"@@ -1,15 +1,15 @@\n GET /user {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4907'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"99c9bfb75395b749e9913a4729126fb5\"'), ('date', 'Sun, 27 May 2012 07:19:30 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"private_gists\":5,\"type\":\"User\",\"company\":\"Criteo\",\"location\":\"Paris, France\",\"hireable\":false,\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"bio\":\"\",\"following\":24,\"blog\":\"http://vincent-jacques.net\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"total_private_repos\":5,\"followers\":13,\"owned_private_repos\":5,\"disk_usage\":16976,\"collaborators\":0,\"html_url\":\"https://github.com/jacquev6\",\"url\":\"https://api.github.com/users/jacquev6\",\"name\":\"Vincent Jacques\",\"login\":\"jacquev6\",\"public_repos\":11,\"public_gists\":3,\"email\":\"vincent@vincent-jacques.net\",\"id\":327146,\"plan\":{\"private_repos\":5,\"collaborators\":1,\"name\":\"micro\",\"space\":614400},\"created_at\":\"2010-07-09T06:10:06Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"8974bb1628a3e3a6d3eb3b08c1b5a46b\"'), ('date', 'Sun, 27 May 2012 07:32:54 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"type\":\"User\",\"bio\":\"\",\"disk_usage\":16976,\"total_private_repos\":5,\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"owned_private_repos\":5,\"collaborators\":0,\"plan\":{\"collaborators\":1,\"private_repos\":5,\"name\":\"micro\",\"space\":614400},\"company\":\"Criteo\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"email\":\"vincent@vincent-jacques.net\",\"public_gists\":3,\"followers\":13,\"name\":\"Vincent Jacques\",\"created_at\":\"2010-07-09T06:10:06Z\",\"blog\":\"http://vincent-jacques.net\",\"location\":\"Paris, France\",\"hireable\":false,\"id\":327146,\"private_gists\":5,\"public_repos\":11,\"following\":24,\"html_url\":\"https://github.com/jacquev6\"}\n \n GET /repos/jacquev6/PyGithub {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4906'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"4c20acf0b23f75bbf25106b1a04f65a5\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"description\":\"Python library implementing the full Github API v3\",\"full_name\":\"jacquev6/PyGithub\",\"has_wiki\":false,\"has_issues\":true,\"updated_at\":\"2012-05-27T06:55:28Z\",\"forks\":3,\"mirror_url\":null,\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"open_issues\":16,\"fork\":false,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"size\":308,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"private\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"owner\":{\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"url\":\"https://api.github.com/users/jacquev6\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"has_downloads\":true,\"language\":\"Python\",\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"id\":3544490,\"permissions\":{\"admin\":true,\"pull\":true,\"push\":true},\"created_at\":\"2012-02-25T12:53:47Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4995'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"f1e4eb3993a364b66b68ec9db42405bd\"'), ('date', 'Sun, 27 May 2012 07:32:55 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"updated_at\":\"2012-05-27T07:29:24Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T07:29:24Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\n \n-GET /repos/jacquev6/PyGithub/issues/events/15819975 {'Authorization': 'Basic login_and_password_removed'} null\n+GET /repos/jacquev6/PyGithub/issues/events/16348656 {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4905'), ('content-length', '2430'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"a3d244842d23f92f69a23e21626fad11\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\",\"issue\":{\"updated_at\":\"2012-05-26T14:59:33Z\",\"body\":\"Body edited by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/28\",\"comments\":0,\"milestone\":{\"creator\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones/1\",\"number\":1,\"title\":\"Version 0.4\",\"due_on\":\"2012-03-13T07:00:00Z\",\"closed_issues\":3,\"open_issues\":0,\"created_at\":\"2012-03-08T12:22:10Z\",\"state\":\"closed\",\"description\":\"\",\"id\":93546},\"number\":28,\"assignee\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"closed_at\":\"2012-05-26T14:59:33Z\",\"title\":\"Issue created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-19T10:38:23Z\",\"state\":\"closed\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"id\":4653757,\"pull_request\":{\"diff_url\":null,\"patch_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/28\"},\"commit_id\":null,\"created_at\":\"2012-05-19T10:38:23Z\",\"event\":\"subscribed\",\"id\":15819975,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146}}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('content-length', '1384'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fefecab09e7355d4ef9875677c2631da\"'), ('date', 'Sun, 27 May 2012 07:32:56 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\",\"issue\":{\"updated_at\":\"2012-05-27T07:27:51Z\",\"body\":\"Body created by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/30\",\"comments\":0,\"milestone\":null,\"number\":30,\"assignee\":null,\"closed_at\":null,\"title\":\"Issue also created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-27T05:40:15Z\",\"state\":\"open\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"},\"id\":4769659,\"pull_request\":{\"patch_url\":null,\"diff_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/30\"},\"commit_id\":\"ed866fc43833802ab553e5ff8581c81bb00dd433\",\"created_at\":\"2012-05-27T07:29:25Z\",\"event\":\"referenced\",\"id\":16348656,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"}}\n ","status":"modified","deletions":7,"blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","changes":14,"additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206","raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","filename":"test/ReplayData/IssueEvent.setUp.txt"}] diff --git a/tests/ReplayData/PullRequestFile.setUp.txt b/tests/ReplayData/PullRequestFile.setUp.txt index 43dce8e423..784f78777c 100644 --- a/tests/ReplayData/PullRequestFile.setUp.txt +++ b/tests/ReplayData/PullRequestFile.setUp.txt @@ -40,5 +40,5 @@ None None 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4941'), ('content-length', '169480'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"0eeb19c75ce5a922107d104ec2a5dd4e"'), ('date', 'Sun, 27 May 2012 10:47:16 GMT'), ('content-type', 'application/json; charset=utf-8')] -[{"status":"modified","changes":2,"deletions":1,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","filename":"codegen/templates/GithubObject.py","patch":"@@ -70,7 +70,7 @@ def __useAttributes( self, attributes ):\n \n # @toto No need to check if attribute is in attributes when attribute is mandatory\n {% for attribute in class.attributes|dictsort:\"name\" %}\n- if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None:\n+ if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None: # pragma no branch\n \n {% if attribute.type.cardinality == \"scalar\" %}\n {% if attribute.type.simple %}","additions":1,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":50,"deletions":25,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","filename":"src/github/AuthenticatedUser.py","patch":"@@ -568,78 +568,78 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], ( str, unicode ) )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], ( str, unicode ) )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], ( str, unicode ) )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], ( str, unicode ) )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], ( str, unicode ) )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], ( str, unicode ) )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], ( str, unicode ) )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":25,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":18,"deletions":9,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","filename":"src/github/Authorization.py","patch":"@@ -117,21 +117,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"app\", \"created_at\", \"id\", \"note\", \"note_url\", \"scopes\", \"token\", \"updated_at\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"app\" in attributes and attributes[ \"app\" ] is not None:\n+ if \"app\" in attributes and attributes[ \"app\" ] is not None: # pragma no branch\n self.__app = attributes[ \"app\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"note\" in attributes and attributes[ \"note\" ] is not None:\n+ if \"note\" in attributes and attributes[ \"note\" ] is not None: # pragma no branch\n self.__note = attributes[ \"note\" ]\n- if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None:\n+ if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None: # pragma no branch\n self.__note_url = attributes[ \"note_url\" ]\n- if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None:\n+ if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None: # pragma no branch\n self.__scopes = attributes[ \"scopes\" ]\n- if \"token\" in attributes and attributes[ \"token\" ] is not None:\n+ if \"token\" in attributes and attributes[ \"token\" ] is not None: # pragma no branch\n self.__token = attributes[ \"token\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":4,"deletions":2,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","filename":"src/github/Branch.py","patch":"@@ -28,9 +28,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]","additions":2,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":16,"deletions":8,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","filename":"src/github/Commit.py","patch":"@@ -120,33 +120,33 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"commit\", \"committer\", \"files\", \"parents\", \"sha\", \"stats\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = NamedUser.NamedUser( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = GitCommit.GitCommit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = NamedUser.NamedUser( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"files\" ], list ) and ( len( attributes[ \"files\" ] ) == 0 or isinstance( attributes[ \"files\" ][ 0 ], dict ) )\n self.__files = [\n CommitFile.CommitFile( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"files\" ]\n ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n Commit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"stats\" in attributes and attributes[ \"stats\" ] is not None:\n+ if \"stats\" in attributes and attributes[ \"stats\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"stats\" ], dict )\n self.__stats = CommitStats.CommitStats( self.__requester, attributes[ \"stats\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":8,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":22,"deletions":11,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","filename":"src/github/CommitComment.py","patch":"@@ -121,36 +121,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], ( str, unicode ) )\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], ( str, unicode ) )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"line\" ], int )\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], ( str, unicode ) )\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"position\" ], int )\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":18,"deletions":9,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","filename":"src/github/CommitFile.py","patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]","additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","filename":"src/github/CommitStats.py","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"deletions\", \"total\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"additions\" ], int )\n self.__additions = attributes[ \"additions\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"deletions\" ], int )\n self.__deletions = attributes[ \"deletions\" ]\n- if \"total\" in attributes and attributes[ \"total\" ] is not None:\n+ if \"total\" in attributes and attributes[ \"total\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total\" ], int )\n self.__total = attributes[ \"total\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":40,"deletions":20,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","filename":"src/github/Download.py","patch":"@@ -162,43 +162,43 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"accesskeyid\", \"acl\", \"bucket\", \"content_type\", \"created_at\", \"description\", \"download_count\", \"expirationdate\", \"html_url\", \"id\", \"mime_type\", \"name\", \"path\", \"policy\", \"prefix\", \"redirect\", \"s3_url\", \"signature\", \"size\", \"url\", \"x-amz-meta-content-disposition\" ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None:\n+ if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None: # pragma no branch\n self.__accesskeyid = attributes[ \"accesskeyid\" ]\n- if \"acl\" in attributes and attributes[ \"acl\" ] is not None:\n+ if \"acl\" in attributes and attributes[ \"acl\" ] is not None: # pragma no branch\n self.__acl = attributes[ \"acl\" ]\n- if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None:\n+ if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None: # pragma no branch\n self.__bucket = attributes[ \"bucket\" ]\n- if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None:\n+ if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None: # pragma no branch\n self.__content_type = attributes[ \"content_type\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n self.__description = attributes[ \"description\" ]\n- if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None:\n+ if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None: # pragma no branch\n self.__download_count = attributes[ \"download_count\" ]\n- if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None:\n+ if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None: # pragma no branch\n self.__expirationdate = attributes[ \"expirationdate\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None:\n+ if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None: # pragma no branch\n self.__mime_type = attributes[ \"mime_type\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"policy\" in attributes and attributes[ \"policy\" ] is not None:\n+ if \"policy\" in attributes and attributes[ \"policy\" ] is not None: # pragma no branch\n self.__policy = attributes[ \"policy\" ]\n- if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None:\n+ if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None: # pragma no branch\n self.__prefix = attributes[ \"prefix\" ]\n- if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None:\n+ if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None: # pragma no branch\n self.__redirect = attributes[ \"redirect\" ]\n- if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None:\n+ if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None: # pragma no branch\n self.__s3_url = attributes[ \"s3_url\" ]\n- if \"signature\" in attributes and attributes[ \"signature\" ] is not None:\n+ if \"signature\" in attributes and attributes[ \"signature\" ] is not None: # pragma no branch\n self.__signature = attributes[ \"signature\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":20,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":16,"deletions":8,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","filename":"src/github/Event.py","patch":"@@ -60,22 +60,22 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"created_at\", \"id\", \"org\", \"payload\", \"public\", \"repo\", \"type\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"org\" in attributes and attributes[ \"org\" ] is not None:\n+ if \"org\" in attributes and attributes[ \"org\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"org\" ], dict )\n self.__org = Organization.Organization( self.__requester, attributes[ \"org\" ], completion = LazyCompletion )\n- if \"payload\" in attributes and attributes[ \"payload\" ] is not None:\n+ if \"payload\" in attributes and attributes[ \"payload\" ] is not None: # pragma no branch\n self.__payload = attributes[ \"payload\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n self.__public = attributes[ \"public\" ]\n- if \"repo\" in attributes and attributes[ \"repo\" ] is not None:\n+ if \"repo\" in attributes and attributes[ \"repo\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repo\" ], dict )\n self.__repo = Repository.Repository( self.__requester, attributes[ \"repo\" ], completion = LazyCompletion )\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n self.__type = attributes[ \"type\" ]","additions":8,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":30,"deletions":15,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","filename":"src/github/Gist.py","patch":"@@ -220,53 +220,53 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"comments\", \"created_at\", \"description\", \"files\", \"fork_of\", \"forks\", \"git_pull_url\", \"git_push_url\", \"history\", \"html_url\", \"id\", \"public\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], ( str, unicode ) )\n self.__description = attributes[ \"description\" ]\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n self.__files = attributes[ \"files\" ]\n- if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None:\n+ if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork_of\" ], dict )\n self.__fork_of = Gist( self.__requester, attributes[ \"fork_of\" ], completion = LazyCompletion )\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], list ) and ( len( attributes[ \"forks\" ] ) == 0 or isinstance( attributes[ \"forks\" ][ 0 ], dict ) )\n self.__forks = [\n Gist( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"forks\" ]\n ]\n- if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None:\n+ if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_pull_url\" ], ( str, unicode ) )\n self.__git_pull_url = attributes[ \"git_pull_url\" ]\n- if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None:\n+ if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_push_url\" ], ( str, unicode ) )\n self.__git_push_url = attributes[ \"git_push_url\" ]\n- if \"history\" in attributes and attributes[ \"history\" ] is not None:\n+ if \"history\" in attributes and attributes[ \"history\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"history\" ], list ) and ( len( attributes[ \"history\" ] ) == 0 or isinstance( attributes[ \"history\" ][ 0 ], dict ) )\n self.__history = [\n GistHistoryState.GistHistoryState( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"history\" ]\n ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], ( str, unicode ) )\n self.__id = attributes[ \"id\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public\" ], bool )\n self.__public = attributes[ \"public\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":15,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","filename":"src/github/GistComment.py","patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":10,"deletions":5,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","filename":"src/github/GistHistoryState.py","patch":"@@ -44,18 +44,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"change_status\", \"committed_at\", \"url\", \"user\", \"version\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None:\n+ if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"change_status\" ], dict )\n self.__change_status = CommitStats.CommitStats( self.__requester, attributes[ \"change_status\" ], completion = LazyCompletion )\n- if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None:\n+ if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committed_at\" ], ( str, unicode ) )\n self.__committed_at = attributes[ \"committed_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )\n- if \"version\" in attributes and attributes[ \"version\" ] is not None:\n+ if \"version\" in attributes and attributes[ \"version\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"version\" ], ( str, unicode ) )\n self.__version = attributes[ \"version\" ]","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","filename":"src/github/GitAuthor.py","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"date\", \"email\", \"name\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"date\" in attributes and attributes[ \"date\" ] is not None:\n+ if \"date\" in attributes and attributes[ \"date\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"date\" ], ( str, unicode ) )\n self.__date = attributes[ \"date\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":10,"deletions":5,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","filename":"src/github/GitBlob.py","patch":"@@ -42,18 +42,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"content\", \"encoding\", \"sha\", \"size\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"content\" in attributes and attributes[ \"content\" ] is not None:\n+ if \"content\" in attributes and attributes[ \"content\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"content\" ], ( str, unicode ) )\n self.__content = attributes[ \"content\" ]\n- if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None:\n+ if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"encoding\" ], ( str, unicode ) )\n self.__encoding = attributes[ \"encoding\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":14,"deletions":7,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","filename":"src/github/GitCommit.py","patch":"@@ -55,27 +55,27 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"committer\", \"message\", \"parents\", \"sha\", \"tree\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = GitAuthor.GitAuthor( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = GitAuthor.GitAuthor( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], ( str, unicode ) )\n self.__message = attributes[ \"message\" ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n GitCommit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], dict )\n self.__tree = GitTree.GitTree( self.__requester, attributes[ \"tree\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","filename":"src/github/GitObject.py","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","filename":"src/github/GitRef.py","patch":"@@ -55,12 +55,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"object\", \"ref\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"ref\" in attributes and attributes[ \"ref\" ] is not None:\n+ if \"ref\" in attributes and attributes[ \"ref\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ref\" ], ( str, unicode ) )\n self.__ref = attributes[ \"ref\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","filename":"src/github/GitTag.py","patch":"@@ -49,21 +49,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"message\", \"object\", \"sha\", \"tag\", \"tagger\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], ( str, unicode ) )\n self.__message = attributes[ \"message\" ]\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"tag\" in attributes and attributes[ \"tag\" ] is not None:\n+ if \"tag\" in attributes and attributes[ \"tag\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tag\" ], ( str, unicode ) )\n self.__tag = attributes[ \"tag\" ]\n- if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None:\n+ if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tagger\" ], dict )\n self.__tagger = GitAuthor.GitAuthor( self.__requester, attributes[ \"tagger\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","filename":"src/github/GitTree.py","patch":"@@ -33,15 +33,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"tree\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], list ) and ( len( attributes[ \"tree\" ] ) == 0 or isinstance( attributes[ \"tree\" ][ 0 ], dict ) )\n self.__tree = [\n GitTreeElement.GitTreeElement( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"tree\" ]\n ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","filename":"src/github/GitTreeElement.py","patch":"@@ -47,21 +47,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"mode\", \"path\", \"sha\", \"size\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"mode\" in attributes and attributes[ \"mode\" ] is not None:\n+ if \"mode\" in attributes and attributes[ \"mode\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mode\" ], ( str, unicode ) )\n self.__mode = attributes[ \"mode\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], ( str, unicode ) )\n self.__path = attributes[ \"path\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], ( str, unicode ) )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":18,"deletions":9,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","filename":"src/github/Hook.py","patch":"@@ -99,21 +99,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"active\", \"config\", \"created_at\", \"events\", \"id\", \"last_response\", \"name\", \"updated_at\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"active\" in attributes and attributes[ \"active\" ] is not None:\n+ if \"active\" in attributes and attributes[ \"active\" ] is not None: # pragma no branch\n self.__active = attributes[ \"active\" ]\n- if \"config\" in attributes and attributes[ \"config\" ] is not None:\n+ if \"config\" in attributes and attributes[ \"config\" ] is not None: # pragma no branch\n self.__config = attributes[ \"config\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"events\" in attributes and attributes[ \"events\" ] is not None:\n+ if \"events\" in attributes and attributes[ \"events\" ] is not None: # pragma no branch\n self.__events = attributes[ \"events\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None:\n+ if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None: # pragma no branch\n self.__last_response = attributes[ \"last_response\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":53,"deletions":21,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","filename":"src/github/Issue.py","patch":"@@ -110,7 +110,7 @@ def user( self ):\n return self.__user\n \n def add_to_labels( self, *labels ):\n- post_parameters = labels\n+ post_parameters = [ label.name for label in labels ]\n status, headers, data = self.__requester.request(\n \"POST\",\n str( self.url ) + \"/labels\",\n@@ -131,7 +131,12 @@ def create_comment( self, body ):\n return IssueComment.IssueComment( self.__requester, data, completion = NoCompletion )\n \n def delete_labels( self ):\n- pass\n+ status, headers, data = self.__requester.request(\n+ \"DELETE\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ None\n+ )\n \n def edit( self, title = DefaultValueForOptionalParameters, body = DefaultValueForOptionalParameters, assignee = DefaultValueForOptionalParameters, state = DefaultValueForOptionalParameters, milestone = DefaultValueForOptionalParameters, labels = DefaultValueForOptionalParameters ):\n post_parameters = {\n@@ -216,7 +221,13 @@ def remove_from_labels( self, label ):\n )\n \n def set_labels( self, *labels ):\n- pass\n+ post_parameters = [ label.name for label in labels ]\n+ status, headers, data = self.__requester.request(\n+ \"PUT\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ post_parameters\n+ )\n \n def __initAttributes( self ):\n self.__assignee = None\n@@ -257,59 +268,59 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"assignee\", \"body\", \"closed_at\", \"closed_by\", \"comments\", \"created_at\", \"html_url\", \"id\", \"labels\", \"milestone\", \"number\", \"pull_request\", \"repository\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None:\n+ if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"assignee\" ], dict )\n self.__assignee = NamedUser.NamedUser( self.__requester, attributes[ \"assignee\" ], completion = LazyCompletion )\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], ( str, unicode ) )\n self.__body = attributes[ \"body\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_at\" ], ( str, unicode ) )\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None:\n+ if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_by\" ], dict )\n self.__closed_by = NamedUser.NamedUser( self.__requester, attributes[ \"closed_by\" ], completion = LazyCompletion )\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"labels\" in attributes and attributes[ \"labels\" ] is not None:\n+ if \"labels\" in attributes and attributes[ \"labels\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"labels\" ], list ) and ( len( attributes[ \"labels\" ] ) == 0 or isinstance( attributes[ \"labels\" ][ 0 ], dict ) )\n self.__labels = [\n Label.Label( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"labels\" ]\n ]\n- if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None:\n+ if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"milestone\" ], dict )\n self.__milestone = Milestone.Milestone( self.__requester, attributes[ \"milestone\" ], completion = LazyCompletion )\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None:\n+ if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None: # pragma no branch\n self.__pull_request = attributes[ \"pull_request\" ]\n- if \"repository\" in attributes and attributes[ \"repository\" ] is not None:\n+ if \"repository\" in attributes and attributes[ \"repository\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repository\" ], dict )\n self.__repository = Repository.Repository( self.__requester, attributes[ \"repository\" ], completion = LazyCompletion )\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], ( str, unicode ) )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], ( str, unicode ) )\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":32,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","filename":"src/github/IssueComment.py","patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":14,"deletions":7,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","filename":"src/github/IssueEvent.py","patch":"@@ -78,24 +78,24 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"commit_id\", \"created_at\", \"event\", \"id\", \"issue\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], ( str, unicode ) )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"event\" in attributes and attributes[ \"event\" ] is not None:\n+ if \"event\" in attributes and attributes[ \"event\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"event\" ], ( str, unicode ) )\n self.__event = attributes[ \"event\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"issue\" in attributes and attributes[ \"issue\" ] is not None:\n+ if \"issue\" in attributes and attributes[ \"issue\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"issue\" ], dict )\n self.__issue = Issue.Issue( self.__requester, attributes[ \"issue\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":13,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","filename":"src/github/Label.py","patch":"@@ -1,6 +1,8 @@\n # WARNING: this file is generated automaticaly.\n # Do not modify it manually, your work would be lost.\n \n+import urllib\n+\n import PaginatedList\n from GithubObject import *\n \n@@ -43,6 +45,11 @@ def edit( self, name, color ):\n )\n self.__useAttributes( data )\n \n+ # @toto Remove '_identity' from the normalized json description\n+ @property\n+ def _identity( self ):\n+ return urllib.quote( self.name )\n+\n def __initAttributes( self ):\n self.__color = None\n self.__name = None\n@@ -53,9 +60,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"color\", \"name\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"color\" in attributes and attributes[ \"color\" ] is not None:\n+ if \"color\" in attributes and attributes[ \"color\" ] is not None: # pragma no branch\n self.__color = attributes[ \"color\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":10,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":22,"deletions":11,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","filename":"src/github/Milestone.py","patch":"@@ -114,36 +114,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"closed_issues\", \"created_at\", \"creator\", \"description\", \"due_on\", \"id\", \"number\", \"open_issues\", \"state\", \"title\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None:\n+ if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_issues\" ], int )\n self.__closed_issues = attributes[ \"closed_issues\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"creator\" in attributes and attributes[ \"creator\" ] is not None:\n+ if \"creator\" in attributes and attributes[ \"creator\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"creator\" ], dict )\n self.__creator = NamedUser.NamedUser( self.__requester, attributes[ \"creator\" ], completion = LazyCompletion )\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], ( str, unicode ) )\n self.__description = attributes[ \"description\" ]\n- if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None:\n+ if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"due_on\" ], ( str, unicode ) )\n self.__due_on = attributes[ \"due_on\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], ( str, unicode ) )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], ( str, unicode ) )\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":52,"deletions":26,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","filename":"src/github/NamedUser.py","patch":"@@ -365,81 +365,81 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"contributions\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], ( str, unicode ) )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], ( str, unicode ) )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], ( str, unicode ) )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], ( str, unicode ) )\n self.__company = attributes[ \"company\" ]\n- if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None:\n+ if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"contributions\" ], int )\n self.__contributions = attributes[ \"contributions\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], ( str, unicode ) )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], ( str, unicode ) )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], ( str, unicode ) )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":26,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":48,"deletions":24,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","filename":"src/github/Organization.py","patch":"@@ -390,75 +390,75 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"billing_email\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], ( str, unicode ) )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None:\n+ if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"billing_email\" ], ( str, unicode ) )\n self.__billing_email = attributes[ \"billing_email\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], ( str, unicode ) )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], ( str, unicode ) )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], ( str, unicode ) )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], ( str, unicode ) )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], ( str, unicode ) )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], ( str, unicode ) )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], ( str, unicode ) )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]","additions":24,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","filename":"src/github/Permissions.py","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"admin\", \"pull\", \"push\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"admin\" in attributes and attributes[ \"admin\" ] is not None:\n+ if \"admin\" in attributes and attributes[ \"admin\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"admin\" ], bool )\n self.__admin = attributes[ \"admin\" ]\n- if \"pull\" in attributes and attributes[ \"pull\" ] is not None:\n+ if \"pull\" in attributes and attributes[ \"pull\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pull\" ], bool )\n self.__pull = attributes[ \"pull\" ]\n- if \"push\" in attributes and attributes[ \"push\" ] is not None:\n+ if \"push\" in attributes and attributes[ \"push\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"push\" ], bool )\n self.__push = attributes[ \"push\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":8,"deletions":4,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","filename":"src/github/Plan.py","patch":"@@ -37,15 +37,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"collaborators\", \"name\", \"private_repos\", \"space\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None:\n+ if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_repos\" ], int )\n self.__private_repos = attributes[ \"private_repos\" ]\n- if \"space\" in attributes and attributes[ \"space\" ] is not None:\n+ if \"space\" in attributes and attributes[ \"space\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"space\" ], int )\n self.__space = attributes[ \"space\" ]","additions":4,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":52,"deletions":26,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","filename":"src/github/PullRequest.py","patch":"@@ -279,56 +279,56 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"base\", \"body\", \"changed_files\", \"closed_at\", \"comments\", \"commits\", \"created_at\", \"deletions\", \"diff_url\", \"head\", \"html_url\", \"id\", \"issue_url\", \"mergeable\", \"merged\", \"merged_at\", \"merged_by\", \"number\", \"patch_url\", \"review_comments\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"base\" in attributes and attributes[ \"base\" ] is not None:\n+ if \"base\" in attributes and attributes[ \"base\" ] is not None: # pragma no branch\n self.__base = attributes[ \"base\" ]\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None:\n+ if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None: # pragma no branch\n self.__changed_files = attributes[ \"changed_files\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n self.__comments = attributes[ \"comments\" ]\n- if \"commits\" in attributes and attributes[ \"commits\" ] is not None:\n+ if \"commits\" in attributes and attributes[ \"commits\" ] is not None: # pragma no branch\n self.__commits = attributes[ \"commits\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None:\n+ if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None: # pragma no branch\n self.__diff_url = attributes[ \"diff_url\" ]\n- if \"head\" in attributes and attributes[ \"head\" ] is not None:\n+ if \"head\" in attributes and attributes[ \"head\" ] is not None: # pragma no branch\n self.__head = attributes[ \"head\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None:\n+ if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None: # pragma no branch\n self.__issue_url = attributes[ \"issue_url\" ]\n- if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None:\n+ if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None: # pragma no branch\n self.__mergeable = attributes[ \"mergeable\" ]\n- if \"merged\" in attributes and attributes[ \"merged\" ] is not None:\n+ if \"merged\" in attributes and attributes[ \"merged\" ] is not None: # pragma no branch\n self.__merged = attributes[ \"merged\" ]\n- if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None:\n+ if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None: # pragma no branch\n self.__merged_at = attributes[ \"merged_at\" ]\n- if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None:\n+ if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None: # pragma no branch\n self.__merged_by = attributes[ \"merged_by\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n self.__number = attributes[ \"number\" ]\n- if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None:\n+ if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None: # pragma no branch\n self.__patch_url = attributes[ \"patch_url\" ]\n- if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None:\n+ if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None: # pragma no branch\n self.__review_comments = attributes[ \"review_comments\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":26,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":22,"deletions":11,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","filename":"src/github/PullRequestComment.py","patch":"@@ -121,26 +121,26 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":18,"deletions":9,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","filename":"src/github/PullRequestFile.py","patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]","additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":62,"deletions":31,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","filename":"src/github/Repository.py","patch":"@@ -905,96 +905,96 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"clone_url\", \"created_at\", \"description\", \"fork\", \"forks\", \"full_name\", \"git_url\", \"has_downloads\", \"has_issues\", \"has_wiki\", \"homepage\", \"html_url\", \"id\", \"language\", \"master_branch\", \"mirror_url\", \"name\", \"open_issues\", \"organization\", \"owner\", \"parent\", \"permissions\", \"private\", \"pushed_at\", \"size\", \"source\", \"ssh_url\", \"svn_url\", \"updated_at\", \"url\", \"watchers\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None:\n+ if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"clone_url\" ], ( str, unicode ) )\n self.__clone_url = attributes[ \"clone_url\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], ( str, unicode ) )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], ( str, unicode ) )\n self.__description = attributes[ \"description\" ]\n- if \"fork\" in attributes and attributes[ \"fork\" ] is not None:\n+ if \"fork\" in attributes and attributes[ \"fork\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork\" ], bool )\n self.__fork = attributes[ \"fork\" ]\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], int )\n self.__forks = attributes[ \"forks\" ]\n- if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None:\n+ if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"full_name\" ], ( str, unicode ) )\n self.__full_name = attributes[ \"full_name\" ]\n- if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None:\n+ if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_url\" ], ( str, unicode ) )\n self.__git_url = attributes[ \"git_url\" ]\n- if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None:\n+ if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_downloads\" ], bool )\n self.__has_downloads = attributes[ \"has_downloads\" ]\n- if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None:\n+ if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_issues\" ], bool )\n self.__has_issues = attributes[ \"has_issues\" ]\n- if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None:\n+ if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_wiki\" ], bool )\n self.__has_wiki = attributes[ \"has_wiki\" ]\n- if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None:\n+ if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"homepage\" ], ( str, unicode ) )\n self.__homepage = attributes[ \"homepage\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], ( str, unicode ) )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"language\" in attributes and attributes[ \"language\" ] is not None:\n+ if \"language\" in attributes and attributes[ \"language\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"language\" ], ( str, unicode ) )\n self.__language = attributes[ \"language\" ]\n- if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None:\n+ if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"master_branch\" ], ( str, unicode ) )\n self.__master_branch = attributes[ \"master_branch\" ]\n- if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None:\n+ if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mirror_url\" ], ( str, unicode ) )\n self.__mirror_url = attributes[ \"mirror_url\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"organization\" in attributes and attributes[ \"organization\" ] is not None:\n+ if \"organization\" in attributes and attributes[ \"organization\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"organization\" ], dict )\n self.__organization = Organization.Organization( self.__requester, attributes[ \"organization\" ], completion = LazyCompletion )\n- if \"owner\" in attributes and attributes[ \"owner\" ] is not None:\n+ if \"owner\" in attributes and attributes[ \"owner\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owner\" ], dict )\n self.__owner = NamedUser.NamedUser( self.__requester, attributes[ \"owner\" ], completion = LazyCompletion )\n- if \"parent\" in attributes and attributes[ \"parent\" ] is not None:\n+ if \"parent\" in attributes and attributes[ \"parent\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parent\" ], dict )\n self.__parent = Repository( self.__requester, attributes[ \"parent\" ], completion = LazyCompletion )\n- if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None:\n+ if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"permissions\" ], dict )\n self.__permissions = Permissions.Permissions( self.__requester, attributes[ \"permissions\" ], completion = LazyCompletion )\n- if \"private\" in attributes and attributes[ \"private\" ] is not None:\n+ if \"private\" in attributes and attributes[ \"private\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private\" ], bool )\n self.__private = attributes[ \"private\" ]\n- if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None:\n+ if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pushed_at\" ], ( str, unicode ) )\n self.__pushed_at = attributes[ \"pushed_at\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"source\" in attributes and attributes[ \"source\" ] is not None:\n+ if \"source\" in attributes and attributes[ \"source\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"source\" ], dict )\n self.__source = Repository( self.__requester, attributes[ \"source\" ], completion = LazyCompletion )\n- if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None:\n+ if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ssh_url\" ], ( str, unicode ) )\n self.__ssh_url = attributes[ \"ssh_url\" ]\n- if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None:\n+ if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"svn_url\" ], ( str, unicode ) )\n self.__svn_url = attributes[ \"svn_url\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], ( str, unicode ) )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], ( str, unicode ) )\n self.__url = attributes[ \"url\" ]\n- if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None:\n+ if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"watchers\" ], int )\n self.__watchers = attributes[ \"watchers\" ]","additions":31,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":10,"deletions":5,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","filename":"src/github/RepositoryKey.py","patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":8,"deletions":4,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","filename":"src/github/Tag.py","patch":"@@ -38,15 +38,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", \"tarball_url\", \"zipball_url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], ( str, unicode ) )\n self.__name = attributes[ \"name\" ]\n- if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None:\n+ if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tarball_url\" ], ( str, unicode ) )\n self.__tarball_url = attributes[ \"tarball_url\" ]\n- if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None:\n+ if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"zipball_url\" ], ( str, unicode ) )\n self.__zipball_url = attributes[ \"zipball_url\" ]","additions":4,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","filename":"src/github/Team.py","patch":"@@ -172,15 +172,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"members_count\", \"name\", \"permission\", \"repos_count\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None:\n+ if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None: # pragma no branch\n self.__members_count = attributes[ \"members_count\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"permission\" in attributes and attributes[ \"permission\" ] is not None:\n+ if \"permission\" in attributes and attributes[ \"permission\" ] is not None: # pragma no branch\n self.__permission = attributes[ \"permission\" ]\n- if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None:\n+ if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None: # pragma no branch\n self.__repos_count = attributes[ \"repos_count\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":10,"deletions":5,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","filename":"src/github/UserKey.py","patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":26,"deletions":1,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","filename":"test/Issue.py","patch":"@@ -3,7 +3,8 @@\n class Issue( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.issue = self.g.get_user().get_repo( \"PyGithub\" ).get_issue( 28 )\r\n+ self.repo = self.g.get_user().get_repo( \"PyGithub\" )\r\n+ self.issue = self.repo.get_issue( 28 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.issue.assignee.login, \"jacquev6\" )\r\n@@ -47,3 +48,26 @@ def testGetComments( self ):\n \r\n def testGetEvents( self ):\r\n self.assertListKeyEqual( self.issue.get_events(), lambda e: e.id, [ 15819975, 15820048 ] )\r\n+\r\n+ def testGetLabels( self ):\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testAddAndRemoveLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( bug )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\" ] )\r\n+ self.issue.add_to_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testDeleteAndSetLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.delete_labels()\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [] )\r\n+ self.issue.set_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Question\" ] )\r","additions":25,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":14,"deletions":7,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","filename":"test/IssueEvent.py","patch":"@@ -3,13 +3,13 @@\n class IssueEvent( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 15819975 )\r\n+ self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 16348656 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.event.actor.login, \"jacquev6\" )\r\n- self.assertEqual( self.event.commit_id, None )\r\n- self.assertEqual( self.event.created_at, \"2012-05-19T10:38:23Z\" )\r\n- self.assertEqual( self.event.event, \"subscribed\" )\r\n- self.assertEqual( self.event.id, 15819975 )\r\n- self.assertEqual( self.event.issue.number, 28 )\r\n- self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\" )\r\n+ self.assertEqual( self.event.commit_id, \"ed866fc43833802ab553e5ff8581c81bb00dd433\" )\r\n+ self.assertEqual( self.event.created_at, \"2012-05-27T07:29:25Z\" )\r\n+ self.assertEqual( self.event.event, \"referenced\" )\r\n+ self.assertEqual( self.event.id, 16348656 )\r\n+ self.assertEqual( self.event.issue.number, 30 )\r\n+ self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\" )\r","additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"added","changes":45,"deletions":0,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","filename":"test/ReplayData/Issue.testAddAndRemoveLabels.txt","patch":"@@ -0,0 +1,45 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4992'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"569c414d87e8ec43ec269a9e28bc2982\"'), ('date', 'Sun, 27 May 2012 09:04:01 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4991'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"b659c8dcc1212c71f826547c3cc7ae99\"'), ('date', 'Sun, 27 May 2012 09:04:02 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4990'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4989'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4986'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:05 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+POST /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4984'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","additions":45,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"added","changes":35,"deletions":0,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","filename":"test/ReplayData/Issue.testDeleteAndSetLabels.txt","patch":"@@ -0,0 +1,35 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4974'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fe2e942523eecb156d100829a6347516\"'), ('date', 'Sun, 27 May 2012 09:06:37 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4973'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"931e58d337b2290717303141eda89cd7\"'), ('date', 'Sun, 27 May 2012 09:06:38 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4972'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+204\n+[('status', '204 No Content'), ('x-ratelimit-remaining', '4971'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d41d8cd98f00b204e9800998ecf8427e\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT')]\n+\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4970'), ('content-length', '2'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d751713988987e9331980363e24189ce\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[]\n+\n+PUT /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4969'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4968'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:41 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","additions":35,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"added","changes":5,"deletions":0,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","filename":"test/ReplayData/Issue.testGetLabels.txt","patch":"@@ -0,0 +1,5 @@\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 08:56:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":14,"deletions":7,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","filename":"test/ReplayData/IssueEvent.setUp.txt","patch":"@@ -1,15 +1,15 @@\n GET /user {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4907'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"99c9bfb75395b749e9913a4729126fb5\"'), ('date', 'Sun, 27 May 2012 07:19:30 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"private_gists\":5,\"type\":\"User\",\"company\":\"Criteo\",\"location\":\"Paris, France\",\"hireable\":false,\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"bio\":\"\",\"following\":24,\"blog\":\"http://vincent-jacques.net\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"total_private_repos\":5,\"followers\":13,\"owned_private_repos\":5,\"disk_usage\":16976,\"collaborators\":0,\"html_url\":\"https://github.com/jacquev6\",\"url\":\"https://api.github.com/users/jacquev6\",\"name\":\"Vincent Jacques\",\"login\":\"jacquev6\",\"public_repos\":11,\"public_gists\":3,\"email\":\"vincent@vincent-jacques.net\",\"id\":327146,\"plan\":{\"private_repos\":5,\"collaborators\":1,\"name\":\"micro\",\"space\":614400},\"created_at\":\"2010-07-09T06:10:06Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"8974bb1628a3e3a6d3eb3b08c1b5a46b\"'), ('date', 'Sun, 27 May 2012 07:32:54 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"type\":\"User\",\"bio\":\"\",\"disk_usage\":16976,\"total_private_repos\":5,\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"owned_private_repos\":5,\"collaborators\":0,\"plan\":{\"collaborators\":1,\"private_repos\":5,\"name\":\"micro\",\"space\":614400},\"company\":\"Criteo\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"email\":\"vincent@vincent-jacques.net\",\"public_gists\":3,\"followers\":13,\"name\":\"Vincent Jacques\",\"created_at\":\"2010-07-09T06:10:06Z\",\"blog\":\"http://vincent-jacques.net\",\"location\":\"Paris, France\",\"hireable\":false,\"id\":327146,\"private_gists\":5,\"public_repos\":11,\"following\":24,\"html_url\":\"https://github.com/jacquev6\"}\n \n GET /repos/jacquev6/PyGithub {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4906'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"4c20acf0b23f75bbf25106b1a04f65a5\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"description\":\"Python library implementing the full Github API v3\",\"full_name\":\"jacquev6/PyGithub\",\"has_wiki\":false,\"has_issues\":true,\"updated_at\":\"2012-05-27T06:55:28Z\",\"forks\":3,\"mirror_url\":null,\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"open_issues\":16,\"fork\":false,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"size\":308,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"private\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"owner\":{\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"url\":\"https://api.github.com/users/jacquev6\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"has_downloads\":true,\"language\":\"Python\",\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"id\":3544490,\"permissions\":{\"admin\":true,\"pull\":true,\"push\":true},\"created_at\":\"2012-02-25T12:53:47Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4995'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"f1e4eb3993a364b66b68ec9db42405bd\"'), ('date', 'Sun, 27 May 2012 07:32:55 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"updated_at\":\"2012-05-27T07:29:24Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T07:29:24Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\n \n-GET /repos/jacquev6/PyGithub/issues/events/15819975 {'Authorization': 'Basic login_and_password_removed'} null\n+GET /repos/jacquev6/PyGithub/issues/events/16348656 {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4905'), ('content-length', '2430'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"a3d244842d23f92f69a23e21626fad11\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\",\"issue\":{\"updated_at\":\"2012-05-26T14:59:33Z\",\"body\":\"Body edited by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/28\",\"comments\":0,\"milestone\":{\"creator\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones/1\",\"number\":1,\"title\":\"Version 0.4\",\"due_on\":\"2012-03-13T07:00:00Z\",\"closed_issues\":3,\"open_issues\":0,\"created_at\":\"2012-03-08T12:22:10Z\",\"state\":\"closed\",\"description\":\"\",\"id\":93546},\"number\":28,\"assignee\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"closed_at\":\"2012-05-26T14:59:33Z\",\"title\":\"Issue created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-19T10:38:23Z\",\"state\":\"closed\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"id\":4653757,\"pull_request\":{\"diff_url\":null,\"patch_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/28\"},\"commit_id\":null,\"created_at\":\"2012-05-19T10:38:23Z\",\"event\":\"subscribed\",\"id\":15819975,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146}}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('content-length', '1384'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fefecab09e7355d4ef9875677c2631da\"'), ('date', 'Sun, 27 May 2012 07:32:56 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\",\"issue\":{\"updated_at\":\"2012-05-27T07:27:51Z\",\"body\":\"Body created by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/30\",\"comments\":0,\"milestone\":null,\"number\":30,\"assignee\":null,\"closed_at\":null,\"title\":\"Issue also created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-27T05:40:15Z\",\"state\":\"open\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"},\"id\":4769659,\"pull_request\":{\"patch_url\":null,\"diff_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/30\"},\"commit_id\":\"ed866fc43833802ab553e5ff8581c81bb00dd433\",\"created_at\":\"2012-05-27T07:29:25Z\",\"event\":\"referenced\",\"id\":16348656,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"}}\n ","additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"}] +[{"status":"modified","changes":2,"deletions":1,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/codegen/templates/GithubObject.py","filename":"codegen/templates/GithubObject.py","patch":"@@ -70,7 +70,7 @@ def __useAttributes( self, attributes ):\n \n # @toto No need to check if attribute is in attributes when attribute is mandatory\n {% for attribute in class.attributes|dictsort:\"name\" %}\n- if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None:\n+ if \"{{ attribute.name }}\" in attributes and attributes[ \"{{ attribute.name }}\" ] is not None: # pragma no branch\n \n {% if attribute.type.cardinality == \"scalar\" %}\n {% if attribute.type.simple %}","additions":1,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":50,"deletions":25,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/AuthenticatedUser.py","filename":"src/github/AuthenticatedUser.py","patch":"@@ -568,78 +568,78 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], str )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], str )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], str )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], str )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], str )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], str )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], str )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":25,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":18,"deletions":9,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Authorization.py","filename":"src/github/Authorization.py","patch":"@@ -117,21 +117,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"app\", \"created_at\", \"id\", \"note\", \"note_url\", \"scopes\", \"token\", \"updated_at\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"app\" in attributes and attributes[ \"app\" ] is not None:\n+ if \"app\" in attributes and attributes[ \"app\" ] is not None: # pragma no branch\n self.__app = attributes[ \"app\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"note\" in attributes and attributes[ \"note\" ] is not None:\n+ if \"note\" in attributes and attributes[ \"note\" ] is not None: # pragma no branch\n self.__note = attributes[ \"note\" ]\n- if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None:\n+ if \"note_url\" in attributes and attributes[ \"note_url\" ] is not None: # pragma no branch\n self.__note_url = attributes[ \"note_url\" ]\n- if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None:\n+ if \"scopes\" in attributes and attributes[ \"scopes\" ] is not None: # pragma no branch\n self.__scopes = attributes[ \"scopes\" ]\n- if \"token\" in attributes and attributes[ \"token\" ] is not None:\n+ if \"token\" in attributes and attributes[ \"token\" ] is not None: # pragma no branch\n self.__token = attributes[ \"token\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":4,"deletions":2,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Branch.py","filename":"src/github/Branch.py","patch":"@@ -28,9 +28,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]","additions":2,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":16,"deletions":8,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Commit.py","filename":"src/github/Commit.py","patch":"@@ -120,33 +120,33 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"commit\", \"committer\", \"files\", \"parents\", \"sha\", \"stats\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = NamedUser.NamedUser( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = GitCommit.GitCommit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = NamedUser.NamedUser( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"files\" ], list ) and ( len( attributes[ \"files\" ] ) == 0 or isinstance( attributes[ \"files\" ][ 0 ], dict ) )\n self.__files = [\n CommitFile.CommitFile( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"files\" ]\n ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n Commit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"stats\" in attributes and attributes[ \"stats\" ] is not None:\n+ if \"stats\" in attributes and attributes[ \"stats\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"stats\" ], dict )\n self.__stats = CommitStats.CommitStats( self.__requester, attributes[ \"stats\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":8,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":22,"deletions":11,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitComment.py","filename":"src/github/CommitComment.py","patch":"@@ -121,36 +121,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], str )\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], str )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"line\" ], int )\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], str )\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"position\" ], int )\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":18,"deletions":9,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitFile.py","filename":"src/github/CommitFile.py","patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]","additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/CommitStats.py","filename":"src/github/CommitStats.py","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"deletions\", \"total\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"additions\" ], int )\n self.__additions = attributes[ \"additions\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"deletions\" ], int )\n self.__deletions = attributes[ \"deletions\" ]\n- if \"total\" in attributes and attributes[ \"total\" ] is not None:\n+ if \"total\" in attributes and attributes[ \"total\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total\" ], int )\n self.__total = attributes[ \"total\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":40,"deletions":20,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Download.py","filename":"src/github/Download.py","patch":"@@ -162,43 +162,43 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"accesskeyid\", \"acl\", \"bucket\", \"content_type\", \"created_at\", \"description\", \"download_count\", \"expirationdate\", \"html_url\", \"id\", \"mime_type\", \"name\", \"path\", \"policy\", \"prefix\", \"redirect\", \"s3_url\", \"signature\", \"size\", \"url\", \"x-amz-meta-content-disposition\" ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None:\n+ if \"accesskeyid\" in attributes and attributes[ \"accesskeyid\" ] is not None: # pragma no branch\n self.__accesskeyid = attributes[ \"accesskeyid\" ]\n- if \"acl\" in attributes and attributes[ \"acl\" ] is not None:\n+ if \"acl\" in attributes and attributes[ \"acl\" ] is not None: # pragma no branch\n self.__acl = attributes[ \"acl\" ]\n- if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None:\n+ if \"bucket\" in attributes and attributes[ \"bucket\" ] is not None: # pragma no branch\n self.__bucket = attributes[ \"bucket\" ]\n- if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None:\n+ if \"content_type\" in attributes and attributes[ \"content_type\" ] is not None: # pragma no branch\n self.__content_type = attributes[ \"content_type\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n self.__description = attributes[ \"description\" ]\n- if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None:\n+ if \"download_count\" in attributes and attributes[ \"download_count\" ] is not None: # pragma no branch\n self.__download_count = attributes[ \"download_count\" ]\n- if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None:\n+ if \"expirationdate\" in attributes and attributes[ \"expirationdate\" ] is not None: # pragma no branch\n self.__expirationdate = attributes[ \"expirationdate\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None:\n+ if \"mime_type\" in attributes and attributes[ \"mime_type\" ] is not None: # pragma no branch\n self.__mime_type = attributes[ \"mime_type\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"policy\" in attributes and attributes[ \"policy\" ] is not None:\n+ if \"policy\" in attributes and attributes[ \"policy\" ] is not None: # pragma no branch\n self.__policy = attributes[ \"policy\" ]\n- if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None:\n+ if \"prefix\" in attributes and attributes[ \"prefix\" ] is not None: # pragma no branch\n self.__prefix = attributes[ \"prefix\" ]\n- if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None:\n+ if \"redirect\" in attributes and attributes[ \"redirect\" ] is not None: # pragma no branch\n self.__redirect = attributes[ \"redirect\" ]\n- if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None:\n+ if \"s3_url\" in attributes and attributes[ \"s3_url\" ] is not None: # pragma no branch\n self.__s3_url = attributes[ \"s3_url\" ]\n- if \"signature\" in attributes and attributes[ \"signature\" ] is not None:\n+ if \"signature\" in attributes and attributes[ \"signature\" ] is not None: # pragma no branch\n self.__signature = attributes[ \"signature\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":20,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":16,"deletions":8,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Event.py","filename":"src/github/Event.py","patch":"@@ -60,22 +60,22 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"created_at\", \"id\", \"org\", \"payload\", \"public\", \"repo\", \"type\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"org\" in attributes and attributes[ \"org\" ] is not None:\n+ if \"org\" in attributes and attributes[ \"org\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"org\" ], dict )\n self.__org = Organization.Organization( self.__requester, attributes[ \"org\" ], completion = LazyCompletion )\n- if \"payload\" in attributes and attributes[ \"payload\" ] is not None:\n+ if \"payload\" in attributes and attributes[ \"payload\" ] is not None: # pragma no branch\n self.__payload = attributes[ \"payload\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n self.__public = attributes[ \"public\" ]\n- if \"repo\" in attributes and attributes[ \"repo\" ] is not None:\n+ if \"repo\" in attributes and attributes[ \"repo\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repo\" ], dict )\n self.__repo = Repository.Repository( self.__requester, attributes[ \"repo\" ], completion = LazyCompletion )\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n self.__type = attributes[ \"type\" ]","additions":8,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":30,"deletions":15,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Gist.py","filename":"src/github/Gist.py","patch":"@@ -220,53 +220,53 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"comments\", \"created_at\", \"description\", \"files\", \"fork_of\", \"forks\", \"git_pull_url\", \"git_push_url\", \"history\", \"html_url\", \"id\", \"public\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], str )\n self.__description = attributes[ \"description\" ]\n- if \"files\" in attributes and attributes[ \"files\" ] is not None:\n+ if \"files\" in attributes and attributes[ \"files\" ] is not None: # pragma no branch\n self.__files = attributes[ \"files\" ]\n- if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None:\n+ if \"fork_of\" in attributes and attributes[ \"fork_of\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork_of\" ], dict )\n self.__fork_of = Gist( self.__requester, attributes[ \"fork_of\" ], completion = LazyCompletion )\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], list ) and ( len( attributes[ \"forks\" ] ) == 0 or isinstance( attributes[ \"forks\" ][ 0 ], dict ) )\n self.__forks = [\n Gist( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"forks\" ]\n ]\n- if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None:\n+ if \"git_pull_url\" in attributes and attributes[ \"git_pull_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_pull_url\" ], str )\n self.__git_pull_url = attributes[ \"git_pull_url\" ]\n- if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None:\n+ if \"git_push_url\" in attributes and attributes[ \"git_push_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_push_url\" ], str )\n self.__git_push_url = attributes[ \"git_push_url\" ]\n- if \"history\" in attributes and attributes[ \"history\" ] is not None:\n+ if \"history\" in attributes and attributes[ \"history\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"history\" ], list ) and ( len( attributes[ \"history\" ] ) == 0 or isinstance( attributes[ \"history\" ][ 0 ], dict ) )\n self.__history = [\n GistHistoryState.GistHistoryState( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"history\" ]\n ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], str )\n self.__id = attributes[ \"id\" ]\n- if \"public\" in attributes and attributes[ \"public\" ] is not None:\n+ if \"public\" in attributes and attributes[ \"public\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public\" ], bool )\n self.__public = attributes[ \"public\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":15,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistComment.py","filename":"src/github/GistComment.py","patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":10,"deletions":5,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GistHistoryState.py","filename":"src/github/GistHistoryState.py","patch":"@@ -44,18 +44,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"change_status\", \"committed_at\", \"url\", \"user\", \"version\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None:\n+ if \"change_status\" in attributes and attributes[ \"change_status\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"change_status\" ], dict )\n self.__change_status = CommitStats.CommitStats( self.__requester, attributes[ \"change_status\" ], completion = LazyCompletion )\n- if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None:\n+ if \"committed_at\" in attributes and attributes[ \"committed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committed_at\" ], str )\n self.__committed_at = attributes[ \"committed_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )\n- if \"version\" in attributes and attributes[ \"version\" ] is not None:\n+ if \"version\" in attributes and attributes[ \"version\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"version\" ], str )\n self.__version = attributes[ \"version\" ]","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitAuthor.py","filename":"src/github/GitAuthor.py","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"date\", \"email\", \"name\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"date\" in attributes and attributes[ \"date\" ] is not None:\n+ if \"date\" in attributes and attributes[ \"date\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"date\" ], str )\n self.__date = attributes[ \"date\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":10,"deletions":5,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitBlob.py","filename":"src/github/GitBlob.py","patch":"@@ -42,18 +42,18 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"content\", \"encoding\", \"sha\", \"size\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"content\" in attributes and attributes[ \"content\" ] is not None:\n+ if \"content\" in attributes and attributes[ \"content\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"content\" ], str )\n self.__content = attributes[ \"content\" ]\n- if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None:\n+ if \"encoding\" in attributes and attributes[ \"encoding\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"encoding\" ], str )\n self.__encoding = attributes[ \"encoding\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":14,"deletions":7,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitCommit.py","filename":"src/github/GitCommit.py","patch":"@@ -55,27 +55,27 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"author\", \"committer\", \"message\", \"parents\", \"sha\", \"tree\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"author\" in attributes and attributes[ \"author\" ] is not None:\n+ if \"author\" in attributes and attributes[ \"author\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"author\" ], dict )\n self.__author = GitAuthor.GitAuthor( self.__requester, attributes[ \"author\" ], completion = LazyCompletion )\n- if \"committer\" in attributes and attributes[ \"committer\" ] is not None:\n+ if \"committer\" in attributes and attributes[ \"committer\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"committer\" ], dict )\n self.__committer = GitAuthor.GitAuthor( self.__requester, attributes[ \"committer\" ], completion = LazyCompletion )\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], str )\n self.__message = attributes[ \"message\" ]\n- if \"parents\" in attributes and attributes[ \"parents\" ] is not None:\n+ if \"parents\" in attributes and attributes[ \"parents\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parents\" ], list ) and ( len( attributes[ \"parents\" ] ) == 0 or isinstance( attributes[ \"parents\" ][ 0 ], dict ) )\n self.__parents = [\n GitCommit( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"parents\" ]\n ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], dict )\n self.__tree = GitTree.GitTree( self.__requester, attributes[ \"tree\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitObject.py","filename":"src/github/GitObject.py","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitRef.py","filename":"src/github/GitRef.py","patch":"@@ -55,12 +55,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"object\", \"ref\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"ref\" in attributes and attributes[ \"ref\" ] is not None:\n+ if \"ref\" in attributes and attributes[ \"ref\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ref\" ], str )\n self.__ref = attributes[ \"ref\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTag.py","filename":"src/github/GitTag.py","patch":"@@ -49,21 +49,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"message\", \"object\", \"sha\", \"tag\", \"tagger\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"message\" in attributes and attributes[ \"message\" ] is not None:\n+ if \"message\" in attributes and attributes[ \"message\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"message\" ], str )\n self.__message = attributes[ \"message\" ]\n- if \"object\" in attributes and attributes[ \"object\" ] is not None:\n+ if \"object\" in attributes and attributes[ \"object\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"object\" ], dict )\n self.__object = GitObject.GitObject( self.__requester, attributes[ \"object\" ], completion = LazyCompletion )\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"tag\" in attributes and attributes[ \"tag\" ] is not None:\n+ if \"tag\" in attributes and attributes[ \"tag\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tag\" ], str )\n self.__tag = attributes[ \"tag\" ]\n- if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None:\n+ if \"tagger\" in attributes and attributes[ \"tagger\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tagger\" ], dict )\n self.__tagger = GitAuthor.GitAuthor( self.__requester, attributes[ \"tagger\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTree.py","filename":"src/github/GitTree.py","patch":"@@ -33,15 +33,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"sha\", \"tree\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"tree\" in attributes and attributes[ \"tree\" ] is not None:\n+ if \"tree\" in attributes and attributes[ \"tree\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tree\" ], list ) and ( len( attributes[ \"tree\" ] ) == 0 or isinstance( attributes[ \"tree\" ][ 0 ], dict ) )\n self.__tree = [\n GitTreeElement.GitTreeElement( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"tree\" ]\n ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/GitTreeElement.py","filename":"src/github/GitTreeElement.py","patch":"@@ -47,21 +47,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"mode\", \"path\", \"sha\", \"size\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"mode\" in attributes and attributes[ \"mode\" ] is not None:\n+ if \"mode\" in attributes and attributes[ \"mode\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mode\" ], str )\n self.__mode = attributes[ \"mode\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"path\" ], str )\n self.__path = attributes[ \"path\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"sha\" ], str )\n self.__sha = attributes[ \"sha\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":18,"deletions":9,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Hook.py","filename":"src/github/Hook.py","patch":"@@ -99,21 +99,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"active\", \"config\", \"created_at\", \"events\", \"id\", \"last_response\", \"name\", \"updated_at\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"active\" in attributes and attributes[ \"active\" ] is not None:\n+ if \"active\" in attributes and attributes[ \"active\" ] is not None: # pragma no branch\n self.__active = attributes[ \"active\" ]\n- if \"config\" in attributes and attributes[ \"config\" ] is not None:\n+ if \"config\" in attributes and attributes[ \"config\" ] is not None: # pragma no branch\n self.__config = attributes[ \"config\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"events\" in attributes and attributes[ \"events\" ] is not None:\n+ if \"events\" in attributes and attributes[ \"events\" ] is not None: # pragma no branch\n self.__events = attributes[ \"events\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None:\n+ if \"last_response\" in attributes and attributes[ \"last_response\" ] is not None: # pragma no branch\n self.__last_response = attributes[ \"last_response\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":53,"deletions":21,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Issue.py","filename":"src/github/Issue.py","patch":"@@ -110,7 +110,7 @@ def user( self ):\n return self.__user\n \n def add_to_labels( self, *labels ):\n- post_parameters = labels\n+ post_parameters = [ label.name for label in labels ]\n status, headers, data = self.__requester.request(\n \"POST\",\n str( self.url ) + \"/labels\",\n@@ -131,7 +131,12 @@ def create_comment( self, body ):\n return IssueComment.IssueComment( self.__requester, data, completion = NoCompletion )\n \n def delete_labels( self ):\n- pass\n+ status, headers, data = self.__requester.request(\n+ \"DELETE\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ None\n+ )\n \n def edit( self, title = DefaultValueForOptionalParameters, body = DefaultValueForOptionalParameters, assignee = DefaultValueForOptionalParameters, state = DefaultValueForOptionalParameters, milestone = DefaultValueForOptionalParameters, labels = DefaultValueForOptionalParameters ):\n post_parameters = {\n@@ -216,7 +221,13 @@ def remove_from_labels( self, label ):\n )\n \n def set_labels( self, *labels ):\n- pass\n+ post_parameters = [ label.name for label in labels ]\n+ status, headers, data = self.__requester.request(\n+ \"PUT\",\n+ str( self.url ) + \"/labels\",\n+ None,\n+ post_parameters\n+ )\n \n def __initAttributes( self ):\n self.__assignee = None\n@@ -257,59 +268,59 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"assignee\", \"body\", \"closed_at\", \"closed_by\", \"comments\", \"created_at\", \"html_url\", \"id\", \"labels\", \"milestone\", \"number\", \"pull_request\", \"repository\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None:\n+ if \"assignee\" in attributes and attributes[ \"assignee\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"assignee\" ], dict )\n self.__assignee = NamedUser.NamedUser( self.__requester, attributes[ \"assignee\" ], completion = LazyCompletion )\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"body\" ], str )\n self.__body = attributes[ \"body\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_at\" ], str )\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None:\n+ if \"closed_by\" in attributes and attributes[ \"closed_by\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_by\" ], dict )\n self.__closed_by = NamedUser.NamedUser( self.__requester, attributes[ \"closed_by\" ], completion = LazyCompletion )\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"comments\" ], int )\n self.__comments = attributes[ \"comments\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"labels\" in attributes and attributes[ \"labels\" ] is not None:\n+ if \"labels\" in attributes and attributes[ \"labels\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"labels\" ], list ) and ( len( attributes[ \"labels\" ] ) == 0 or isinstance( attributes[ \"labels\" ][ 0 ], dict ) )\n self.__labels = [\n Label.Label( self.__requester, element, completion = LazyCompletion )\n for element in attributes[ \"labels\" ]\n ]\n- if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None:\n+ if \"milestone\" in attributes and attributes[ \"milestone\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"milestone\" ], dict )\n self.__milestone = Milestone.Milestone( self.__requester, attributes[ \"milestone\" ], completion = LazyCompletion )\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None:\n+ if \"pull_request\" in attributes and attributes[ \"pull_request\" ] is not None: # pragma no branch\n self.__pull_request = attributes[ \"pull_request\" ]\n- if \"repository\" in attributes and attributes[ \"repository\" ] is not None:\n+ if \"repository\" in attributes and attributes[ \"repository\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"repository\" ], dict )\n self.__repository = Repository.Repository( self.__requester, attributes[ \"repository\" ], completion = LazyCompletion )\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], str )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], str )\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":32,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueComment.py","filename":"src/github/IssueComment.py","patch":"@@ -68,16 +68,16 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"created_at\", \"id\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":14,"deletions":7,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/IssueEvent.py","filename":"src/github/IssueEvent.py","patch":"@@ -78,24 +78,24 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"actor\", \"commit_id\", \"created_at\", \"event\", \"id\", \"issue\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"actor\" in attributes and attributes[ \"actor\" ] is not None:\n+ if \"actor\" in attributes and attributes[ \"actor\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"actor\" ], dict )\n self.__actor = NamedUser.NamedUser( self.__requester, attributes[ \"actor\" ], completion = LazyCompletion )\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit_id\" ], str )\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"event\" in attributes and attributes[ \"event\" ] is not None:\n+ if \"event\" in attributes and attributes[ \"event\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"event\" ], str )\n self.__event = attributes[ \"event\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"issue\" in attributes and attributes[ \"issue\" ] is not None:\n+ if \"issue\" in attributes and attributes[ \"issue\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"issue\" ], dict )\n self.__issue = Issue.Issue( self.__requester, attributes[ \"issue\" ], completion = LazyCompletion )\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":13,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Label.py","filename":"src/github/Label.py","patch":"@@ -1,6 +1,8 @@\n # WARNING: this file is generated automaticaly.\n # Do not modify it manually, your work would be lost.\n \n+import urllib\n+\n import PaginatedList\n from GithubObject import *\n \n@@ -43,6 +45,11 @@ def edit( self, name, color ):\n )\n self.__useAttributes( data )\n \n+ # @toto Remove '_identity' from the normalized json description\n+ @property\n+ def _identity( self ):\n+ return urllib.quote( self.name )\n+\n def __initAttributes( self ):\n self.__color = None\n self.__name = None\n@@ -53,9 +60,9 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"color\", \"name\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"color\" in attributes and attributes[ \"color\" ] is not None:\n+ if \"color\" in attributes and attributes[ \"color\" ] is not None: # pragma no branch\n self.__color = attributes[ \"color\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":10,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":22,"deletions":11,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Milestone.py","filename":"src/github/Milestone.py","patch":"@@ -114,36 +114,36 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"closed_issues\", \"created_at\", \"creator\", \"description\", \"due_on\", \"id\", \"number\", \"open_issues\", \"state\", \"title\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None:\n+ if \"closed_issues\" in attributes and attributes[ \"closed_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"closed_issues\" ], int )\n self.__closed_issues = attributes[ \"closed_issues\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"creator\" in attributes and attributes[ \"creator\" ] is not None:\n+ if \"creator\" in attributes and attributes[ \"creator\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"creator\" ], dict )\n self.__creator = NamedUser.NamedUser( self.__requester, attributes[ \"creator\" ], completion = LazyCompletion )\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], str )\n self.__description = attributes[ \"description\" ]\n- if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None:\n+ if \"due_on\" in attributes and attributes[ \"due_on\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"due_on\" ], str )\n self.__due_on = attributes[ \"due_on\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"number\" ], int )\n self.__number = attributes[ \"number\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"state\" ], str )\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"title\" ], str )\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":52,"deletions":26,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/NamedUser.py","filename":"src/github/NamedUser.py","patch":"@@ -365,81 +365,81 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"bio\", \"blog\", \"collaborators\", \"company\", \"contributions\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"hireable\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], str )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"bio\" in attributes and attributes[ \"bio\" ] is not None:\n+ if \"bio\" in attributes and attributes[ \"bio\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"bio\" ], str )\n self.__bio = attributes[ \"bio\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], str )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], str )\n self.__company = attributes[ \"company\" ]\n- if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None:\n+ if \"contributions\" in attributes and attributes[ \"contributions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"contributions\" ], int )\n self.__contributions = attributes[ \"contributions\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], str )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None:\n+ if \"hireable\" in attributes and attributes[ \"hireable\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"hireable\" ], bool )\n self.__hireable = attributes[ \"hireable\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], str )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], str )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":26,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":48,"deletions":24,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Organization.py","filename":"src/github/Organization.py","patch":"@@ -390,75 +390,75 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"avatar_url\", \"billing_email\", \"blog\", \"collaborators\", \"company\", \"created_at\", \"disk_usage\", \"email\", \"followers\", \"following\", \"gravatar_id\", \"html_url\", \"id\", \"location\", \"login\", \"name\", \"owned_private_repos\", \"plan\", \"private_gists\", \"public_gists\", \"public_repos\", \"total_private_repos\", \"type\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None:\n+ if \"avatar_url\" in attributes and attributes[ \"avatar_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"avatar_url\" ], str )\n self.__avatar_url = attributes[ \"avatar_url\" ]\n- if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None:\n+ if \"billing_email\" in attributes and attributes[ \"billing_email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"billing_email\" ], str )\n self.__billing_email = attributes[ \"billing_email\" ]\n- if \"blog\" in attributes and attributes[ \"blog\" ] is not None:\n+ if \"blog\" in attributes and attributes[ \"blog\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"blog\" ], str )\n self.__blog = attributes[ \"blog\" ]\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"company\" in attributes and attributes[ \"company\" ] is not None:\n+ if \"company\" in attributes and attributes[ \"company\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"company\" ], str )\n self.__company = attributes[ \"company\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None:\n+ if \"disk_usage\" in attributes and attributes[ \"disk_usage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"disk_usage\" ], int )\n self.__disk_usage = attributes[ \"disk_usage\" ]\n- if \"email\" in attributes and attributes[ \"email\" ] is not None:\n+ if \"email\" in attributes and attributes[ \"email\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"email\" ], str )\n self.__email = attributes[ \"email\" ]\n- if \"followers\" in attributes and attributes[ \"followers\" ] is not None:\n+ if \"followers\" in attributes and attributes[ \"followers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"followers\" ], int )\n self.__followers = attributes[ \"followers\" ]\n- if \"following\" in attributes and attributes[ \"following\" ] is not None:\n+ if \"following\" in attributes and attributes[ \"following\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"following\" ], int )\n self.__following = attributes[ \"following\" ]\n- if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None:\n+ if \"gravatar_id\" in attributes and attributes[ \"gravatar_id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"gravatar_id\" ], str )\n self.__gravatar_id = attributes[ \"gravatar_id\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"location\" in attributes and attributes[ \"location\" ] is not None:\n+ if \"location\" in attributes and attributes[ \"location\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"location\" ], str )\n self.__location = attributes[ \"location\" ]\n- if \"login\" in attributes and attributes[ \"login\" ] is not None:\n+ if \"login\" in attributes and attributes[ \"login\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"login\" ], str )\n self.__login = attributes[ \"login\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None:\n+ if \"owned_private_repos\" in attributes and attributes[ \"owned_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owned_private_repos\" ], int )\n self.__owned_private_repos = attributes[ \"owned_private_repos\" ]\n- if \"plan\" in attributes and attributes[ \"plan\" ] is not None:\n+ if \"plan\" in attributes and attributes[ \"plan\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"plan\" ], dict )\n self.__plan = Plan.Plan( self.__requester, attributes[ \"plan\" ], completion = LazyCompletion )\n- if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None:\n+ if \"private_gists\" in attributes and attributes[ \"private_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_gists\" ], int )\n self.__private_gists = attributes[ \"private_gists\" ]\n- if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None:\n+ if \"public_gists\" in attributes and attributes[ \"public_gists\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_gists\" ], int )\n self.__public_gists = attributes[ \"public_gists\" ]\n- if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None:\n+ if \"public_repos\" in attributes and attributes[ \"public_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"public_repos\" ], int )\n self.__public_repos = attributes[ \"public_repos\" ]\n- if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None:\n+ if \"total_private_repos\" in attributes and attributes[ \"total_private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"total_private_repos\" ], int )\n self.__total_private_repos = attributes[ \"total_private_repos\" ]\n- if \"type\" in attributes and attributes[ \"type\" ] is not None:\n+ if \"type\" in attributes and attributes[ \"type\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"type\" ], str )\n self.__type = attributes[ \"type\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]","additions":24,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":6,"deletions":3,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Permissions.py","filename":"src/github/Permissions.py","patch":"@@ -32,12 +32,12 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"admin\", \"pull\", \"push\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"admin\" in attributes and attributes[ \"admin\" ] is not None:\n+ if \"admin\" in attributes and attributes[ \"admin\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"admin\" ], bool )\n self.__admin = attributes[ \"admin\" ]\n- if \"pull\" in attributes and attributes[ \"pull\" ] is not None:\n+ if \"pull\" in attributes and attributes[ \"pull\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pull\" ], bool )\n self.__pull = attributes[ \"pull\" ]\n- if \"push\" in attributes and attributes[ \"push\" ] is not None:\n+ if \"push\" in attributes and attributes[ \"push\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"push\" ], bool )\n self.__push = attributes[ \"push\" ]","additions":3,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":8,"deletions":4,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Plan.py","filename":"src/github/Plan.py","patch":"@@ -37,15 +37,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"collaborators\", \"name\", \"private_repos\", \"space\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None:\n+ if \"collaborators\" in attributes and attributes[ \"collaborators\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"collaborators\" ], int )\n self.__collaborators = attributes[ \"collaborators\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None:\n+ if \"private_repos\" in attributes and attributes[ \"private_repos\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private_repos\" ], int )\n self.__private_repos = attributes[ \"private_repos\" ]\n- if \"space\" in attributes and attributes[ \"space\" ] is not None:\n+ if \"space\" in attributes and attributes[ \"space\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"space\" ], int )\n self.__space = attributes[ \"space\" ]","additions":4,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":52,"deletions":26,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequest.py","filename":"src/github/PullRequest.py","patch":"@@ -279,56 +279,56 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"base\", \"body\", \"changed_files\", \"closed_at\", \"comments\", \"commits\", \"created_at\", \"deletions\", \"diff_url\", \"head\", \"html_url\", \"id\", \"issue_url\", \"mergeable\", \"merged\", \"merged_at\", \"merged_by\", \"number\", \"patch_url\", \"review_comments\", \"state\", \"title\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"base\" in attributes and attributes[ \"base\" ] is not None:\n+ if \"base\" in attributes and attributes[ \"base\" ] is not None: # pragma no branch\n self.__base = attributes[ \"base\" ]\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None:\n+ if \"changed_files\" in attributes and attributes[ \"changed_files\" ] is not None: # pragma no branch\n self.__changed_files = attributes[ \"changed_files\" ]\n- if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None:\n+ if \"closed_at\" in attributes and attributes[ \"closed_at\" ] is not None: # pragma no branch\n self.__closed_at = attributes[ \"closed_at\" ]\n- if \"comments\" in attributes and attributes[ \"comments\" ] is not None:\n+ if \"comments\" in attributes and attributes[ \"comments\" ] is not None: # pragma no branch\n self.__comments = attributes[ \"comments\" ]\n- if \"commits\" in attributes and attributes[ \"commits\" ] is not None:\n+ if \"commits\" in attributes and attributes[ \"commits\" ] is not None: # pragma no branch\n self.__commits = attributes[ \"commits\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None:\n+ if \"diff_url\" in attributes and attributes[ \"diff_url\" ] is not None: # pragma no branch\n self.__diff_url = attributes[ \"diff_url\" ]\n- if \"head\" in attributes and attributes[ \"head\" ] is not None:\n+ if \"head\" in attributes and attributes[ \"head\" ] is not None: # pragma no branch\n self.__head = attributes[ \"head\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None:\n+ if \"issue_url\" in attributes and attributes[ \"issue_url\" ] is not None: # pragma no branch\n self.__issue_url = attributes[ \"issue_url\" ]\n- if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None:\n+ if \"mergeable\" in attributes and attributes[ \"mergeable\" ] is not None: # pragma no branch\n self.__mergeable = attributes[ \"mergeable\" ]\n- if \"merged\" in attributes and attributes[ \"merged\" ] is not None:\n+ if \"merged\" in attributes and attributes[ \"merged\" ] is not None: # pragma no branch\n self.__merged = attributes[ \"merged\" ]\n- if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None:\n+ if \"merged_at\" in attributes and attributes[ \"merged_at\" ] is not None: # pragma no branch\n self.__merged_at = attributes[ \"merged_at\" ]\n- if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None:\n+ if \"merged_by\" in attributes and attributes[ \"merged_by\" ] is not None: # pragma no branch\n self.__merged_by = attributes[ \"merged_by\" ]\n- if \"number\" in attributes and attributes[ \"number\" ] is not None:\n+ if \"number\" in attributes and attributes[ \"number\" ] is not None: # pragma no branch\n self.__number = attributes[ \"number\" ]\n- if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None:\n+ if \"patch_url\" in attributes and attributes[ \"patch_url\" ] is not None: # pragma no branch\n self.__patch_url = attributes[ \"patch_url\" ]\n- if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None:\n+ if \"review_comments\" in attributes and attributes[ \"review_comments\" ] is not None: # pragma no branch\n self.__review_comments = attributes[ \"review_comments\" ]\n- if \"state\" in attributes and attributes[ \"state\" ] is not None:\n+ if \"state\" in attributes and attributes[ \"state\" ] is not None: # pragma no branch\n self.__state = attributes[ \"state\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":26,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":22,"deletions":11,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestComment.py","filename":"src/github/PullRequestComment.py","patch":"@@ -121,26 +121,26 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"body\", \"commit_id\", \"created_at\", \"html_url\", \"id\", \"line\", \"path\", \"position\", \"updated_at\", \"url\", \"user\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"body\" in attributes and attributes[ \"body\" ] is not None:\n+ if \"body\" in attributes and attributes[ \"body\" ] is not None: # pragma no branch\n self.__body = attributes[ \"body\" ]\n- if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None:\n+ if \"commit_id\" in attributes and attributes[ \"commit_id\" ] is not None: # pragma no branch\n self.__commit_id = attributes[ \"commit_id\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n self.__created_at = attributes[ \"created_at\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"line\" in attributes and attributes[ \"line\" ] is not None:\n+ if \"line\" in attributes and attributes[ \"line\" ] is not None: # pragma no branch\n self.__line = attributes[ \"line\" ]\n- if \"path\" in attributes and attributes[ \"path\" ] is not None:\n+ if \"path\" in attributes and attributes[ \"path\" ] is not None: # pragma no branch\n self.__path = attributes[ \"path\" ]\n- if \"position\" in attributes and attributes[ \"position\" ] is not None:\n+ if \"position\" in attributes and attributes[ \"position\" ] is not None: # pragma no branch\n self.__position = attributes[ \"position\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"user\" in attributes and attributes[ \"user\" ] is not None:\n+ if \"user\" in attributes and attributes[ \"user\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"user\" ], dict )\n self.__user = NamedUser.NamedUser( self.__requester, attributes[ \"user\" ], completion = LazyCompletion )","additions":11,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":18,"deletions":9,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/PullRequestFile.py","filename":"src/github/PullRequestFile.py","patch":"@@ -62,21 +62,21 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"additions\", \"blob_url\", \"changes\", \"deletions\", \"filename\", \"patch\", \"raw_url\", \"sha\", \"status\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"additions\" in attributes and attributes[ \"additions\" ] is not None:\n+ if \"additions\" in attributes and attributes[ \"additions\" ] is not None: # pragma no branch\n self.__additions = attributes[ \"additions\" ]\n- if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None:\n+ if \"blob_url\" in attributes and attributes[ \"blob_url\" ] is not None: # pragma no branch\n self.__blob_url = attributes[ \"blob_url\" ]\n- if \"changes\" in attributes and attributes[ \"changes\" ] is not None:\n+ if \"changes\" in attributes and attributes[ \"changes\" ] is not None: # pragma no branch\n self.__changes = attributes[ \"changes\" ]\n- if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None:\n+ if \"deletions\" in attributes and attributes[ \"deletions\" ] is not None: # pragma no branch\n self.__deletions = attributes[ \"deletions\" ]\n- if \"filename\" in attributes and attributes[ \"filename\" ] is not None:\n+ if \"filename\" in attributes and attributes[ \"filename\" ] is not None: # pragma no branch\n self.__filename = attributes[ \"filename\" ]\n- if \"patch\" in attributes and attributes[ \"patch\" ] is not None:\n+ if \"patch\" in attributes and attributes[ \"patch\" ] is not None: # pragma no branch\n self.__patch = attributes[ \"patch\" ]\n- if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None:\n+ if \"raw_url\" in attributes and attributes[ \"raw_url\" ] is not None: # pragma no branch\n self.__raw_url = attributes[ \"raw_url\" ]\n- if \"sha\" in attributes and attributes[ \"sha\" ] is not None:\n+ if \"sha\" in attributes and attributes[ \"sha\" ] is not None: # pragma no branch\n self.__sha = attributes[ \"sha\" ]\n- if \"status\" in attributes and attributes[ \"status\" ] is not None:\n+ if \"status\" in attributes and attributes[ \"status\" ] is not None: # pragma no branch\n self.__status = attributes[ \"status\" ]","additions":9,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":62,"deletions":31,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Repository.py","filename":"src/github/Repository.py","patch":"@@ -905,96 +905,96 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"clone_url\", \"created_at\", \"description\", \"fork\", \"forks\", \"full_name\", \"git_url\", \"has_downloads\", \"has_issues\", \"has_wiki\", \"homepage\", \"html_url\", \"id\", \"language\", \"master_branch\", \"mirror_url\", \"name\", \"open_issues\", \"organization\", \"owner\", \"parent\", \"permissions\", \"private\", \"pushed_at\", \"size\", \"source\", \"ssh_url\", \"svn_url\", \"updated_at\", \"url\", \"watchers\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None:\n+ if \"clone_url\" in attributes and attributes[ \"clone_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"clone_url\" ], str )\n self.__clone_url = attributes[ \"clone_url\" ]\n- if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None:\n+ if \"created_at\" in attributes and attributes[ \"created_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"created_at\" ], str )\n self.__created_at = attributes[ \"created_at\" ]\n- if \"description\" in attributes and attributes[ \"description\" ] is not None:\n+ if \"description\" in attributes and attributes[ \"description\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"description\" ], str )\n self.__description = attributes[ \"description\" ]\n- if \"fork\" in attributes and attributes[ \"fork\" ] is not None:\n+ if \"fork\" in attributes and attributes[ \"fork\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"fork\" ], bool )\n self.__fork = attributes[ \"fork\" ]\n- if \"forks\" in attributes and attributes[ \"forks\" ] is not None:\n+ if \"forks\" in attributes and attributes[ \"forks\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"forks\" ], int )\n self.__forks = attributes[ \"forks\" ]\n- if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None:\n+ if \"full_name\" in attributes and attributes[ \"full_name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"full_name\" ], str )\n self.__full_name = attributes[ \"full_name\" ]\n- if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None:\n+ if \"git_url\" in attributes and attributes[ \"git_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"git_url\" ], str )\n self.__git_url = attributes[ \"git_url\" ]\n- if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None:\n+ if \"has_downloads\" in attributes and attributes[ \"has_downloads\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_downloads\" ], bool )\n self.__has_downloads = attributes[ \"has_downloads\" ]\n- if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None:\n+ if \"has_issues\" in attributes and attributes[ \"has_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_issues\" ], bool )\n self.__has_issues = attributes[ \"has_issues\" ]\n- if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None:\n+ if \"has_wiki\" in attributes and attributes[ \"has_wiki\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"has_wiki\" ], bool )\n self.__has_wiki = attributes[ \"has_wiki\" ]\n- if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None:\n+ if \"homepage\" in attributes and attributes[ \"homepage\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"homepage\" ], str )\n self.__homepage = attributes[ \"homepage\" ]\n- if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None:\n+ if \"html_url\" in attributes and attributes[ \"html_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"html_url\" ], str )\n self.__html_url = attributes[ \"html_url\" ]\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"id\" ], int )\n self.__id = attributes[ \"id\" ]\n- if \"language\" in attributes and attributes[ \"language\" ] is not None:\n+ if \"language\" in attributes and attributes[ \"language\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"language\" ], str )\n self.__language = attributes[ \"language\" ]\n- if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None:\n+ if \"master_branch\" in attributes and attributes[ \"master_branch\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"master_branch\" ], str )\n self.__master_branch = attributes[ \"master_branch\" ]\n- if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None:\n+ if \"mirror_url\" in attributes and attributes[ \"mirror_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"mirror_url\" ], str )\n self.__mirror_url = attributes[ \"mirror_url\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None:\n+ if \"open_issues\" in attributes and attributes[ \"open_issues\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"open_issues\" ], int )\n self.__open_issues = attributes[ \"open_issues\" ]\n- if \"organization\" in attributes and attributes[ \"organization\" ] is not None:\n+ if \"organization\" in attributes and attributes[ \"organization\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"organization\" ], dict )\n self.__organization = Organization.Organization( self.__requester, attributes[ \"organization\" ], completion = LazyCompletion )\n- if \"owner\" in attributes and attributes[ \"owner\" ] is not None:\n+ if \"owner\" in attributes and attributes[ \"owner\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"owner\" ], dict )\n self.__owner = NamedUser.NamedUser( self.__requester, attributes[ \"owner\" ], completion = LazyCompletion )\n- if \"parent\" in attributes and attributes[ \"parent\" ] is not None:\n+ if \"parent\" in attributes and attributes[ \"parent\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"parent\" ], dict )\n self.__parent = Repository( self.__requester, attributes[ \"parent\" ], completion = LazyCompletion )\n- if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None:\n+ if \"permissions\" in attributes and attributes[ \"permissions\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"permissions\" ], dict )\n self.__permissions = Permissions.Permissions( self.__requester, attributes[ \"permissions\" ], completion = LazyCompletion )\n- if \"private\" in attributes and attributes[ \"private\" ] is not None:\n+ if \"private\" in attributes and attributes[ \"private\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"private\" ], bool )\n self.__private = attributes[ \"private\" ]\n- if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None:\n+ if \"pushed_at\" in attributes and attributes[ \"pushed_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"pushed_at\" ], str )\n self.__pushed_at = attributes[ \"pushed_at\" ]\n- if \"size\" in attributes and attributes[ \"size\" ] is not None:\n+ if \"size\" in attributes and attributes[ \"size\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"size\" ], int )\n self.__size = attributes[ \"size\" ]\n- if \"source\" in attributes and attributes[ \"source\" ] is not None:\n+ if \"source\" in attributes and attributes[ \"source\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"source\" ], dict )\n self.__source = Repository( self.__requester, attributes[ \"source\" ], completion = LazyCompletion )\n- if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None:\n+ if \"ssh_url\" in attributes and attributes[ \"ssh_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"ssh_url\" ], str )\n self.__ssh_url = attributes[ \"ssh_url\" ]\n- if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None:\n+ if \"svn_url\" in attributes and attributes[ \"svn_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"svn_url\" ], str )\n self.__svn_url = attributes[ \"svn_url\" ]\n- if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None:\n+ if \"updated_at\" in attributes and attributes[ \"updated_at\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"updated_at\" ], str )\n self.__updated_at = attributes[ \"updated_at\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"url\" ], str )\n self.__url = attributes[ \"url\" ]\n- if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None:\n+ if \"watchers\" in attributes and attributes[ \"watchers\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"watchers\" ], int )\n self.__watchers = attributes[ \"watchers\" ]","additions":31,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":10,"deletions":5,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/RepositoryKey.py","filename":"src/github/RepositoryKey.py","patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":8,"deletions":4,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Tag.py","filename":"src/github/Tag.py","patch":"@@ -38,15 +38,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"commit\", \"name\", \"tarball_url\", \"zipball_url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"commit\" in attributes and attributes[ \"commit\" ] is not None:\n+ if \"commit\" in attributes and attributes[ \"commit\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"commit\" ], dict )\n self.__commit = Commit.Commit( self.__requester, attributes[ \"commit\" ], completion = LazyCompletion )\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"name\" ], str )\n self.__name = attributes[ \"name\" ]\n- if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None:\n+ if \"tarball_url\" in attributes and attributes[ \"tarball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"tarball_url\" ], str )\n self.__tarball_url = attributes[ \"tarball_url\" ]\n- if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None:\n+ if \"zipball_url\" in attributes and attributes[ \"zipball_url\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"zipball_url\" ], str )\n self.__zipball_url = attributes[ \"zipball_url\" ]","additions":4,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":12,"deletions":6,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/Team.py","filename":"src/github/Team.py","patch":"@@ -172,15 +172,15 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"members_count\", \"name\", \"permission\", \"repos_count\", \"url\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None:\n+ if \"members_count\" in attributes and attributes[ \"members_count\" ] is not None: # pragma no branch\n self.__members_count = attributes[ \"members_count\" ]\n- if \"name\" in attributes and attributes[ \"name\" ] is not None:\n+ if \"name\" in attributes and attributes[ \"name\" ] is not None: # pragma no branch\n self.__name = attributes[ \"name\" ]\n- if \"permission\" in attributes and attributes[ \"permission\" ] is not None:\n+ if \"permission\" in attributes and attributes[ \"permission\" ] is not None: # pragma no branch\n self.__permission = attributes[ \"permission\" ]\n- if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None:\n+ if \"repos_count\" in attributes and attributes[ \"repos_count\" ] is not None: # pragma no branch\n self.__repos_count = attributes[ \"repos_count\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]","additions":6,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":10,"deletions":5,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/src/github/UserKey.py","filename":"src/github/UserKey.py","patch":"@@ -87,14 +87,14 @@ def __useAttributes( self, attributes ):\n for attribute in attributes:\n assert attribute in [ \"id\", \"key\", \"title\", \"url\", \"verified\", ], attribute\n # @toto No need to check if attribute is in attributes when attribute is mandatory\n- if \"id\" in attributes and attributes[ \"id\" ] is not None:\n+ if \"id\" in attributes and attributes[ \"id\" ] is not None: # pragma no branch\n self.__id = attributes[ \"id\" ]\n- if \"key\" in attributes and attributes[ \"key\" ] is not None:\n+ if \"key\" in attributes and attributes[ \"key\" ] is not None: # pragma no branch\n self.__key = attributes[ \"key\" ]\n- if \"title\" in attributes and attributes[ \"title\" ] is not None:\n+ if \"title\" in attributes and attributes[ \"title\" ] is not None: # pragma no branch\n self.__title = attributes[ \"title\" ]\n- if \"url\" in attributes and attributes[ \"url\" ] is not None:\n+ if \"url\" in attributes and attributes[ \"url\" ] is not None: # pragma no branch\n self.__url = attributes[ \"url\" ]\n- if \"verified\" in attributes and attributes[ \"verified\" ] is not None:\n+ if \"verified\" in attributes and attributes[ \"verified\" ] is not None: # pragma no branch\n assert isinstance( attributes[ \"verified\" ], bool )\n self.__verified = attributes[ \"verified\" ]","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":26,"deletions":1,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/Issue.py","filename":"test/Issue.py","patch":"@@ -3,7 +3,8 @@\n class Issue( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.issue = self.g.get_user().get_repo( \"PyGithub\" ).get_issue( 28 )\r\n+ self.repo = self.g.get_user().get_repo( \"PyGithub\" )\r\n+ self.issue = self.repo.get_issue( 28 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.issue.assignee.login, \"jacquev6\" )\r\n@@ -47,3 +48,26 @@ def testGetComments( self ):\n \r\n def testGetEvents( self ):\r\n self.assertListKeyEqual( self.issue.get_events(), lambda e: e.id, [ 15819975, 15820048 ] )\r\n+\r\n+ def testGetLabels( self ):\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testAddAndRemoveLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( bug )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\", \"Question\" ] )\r\n+ self.issue.remove_from_labels( question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Project management\" ] )\r\n+ self.issue.add_to_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+\r\n+ def testDeleteAndSetLabels( self ):\r\n+ bug = self.repo.get_label( \"Bug\" )\r\n+ question = self.repo.get_label( \"Question\" )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Project management\", \"Question\" ] )\r\n+ self.issue.delete_labels()\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [] )\r\n+ self.issue.set_labels( bug, question )\r\n+ self.assertListKeyEqual( self.issue.get_labels(), lambda l: l.name, [ \"Bug\", \"Question\" ] )\r","additions":25,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":14,"deletions":7,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/IssueEvent.py","filename":"test/IssueEvent.py","patch":"@@ -3,13 +3,13 @@\n class IssueEvent( Framework.TestCase ):\r\n def setUp( self ):\r\n Framework.TestCase.setUp( self )\r\n- self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 15819975 )\r\n+ self.event = self.g.get_user().get_repo( \"PyGithub\" ).get_issues_event( 16348656 )\r\n \r\n def testAttributes( self ):\r\n self.assertEqual( self.event.actor.login, \"jacquev6\" )\r\n- self.assertEqual( self.event.commit_id, None )\r\n- self.assertEqual( self.event.created_at, \"2012-05-19T10:38:23Z\" )\r\n- self.assertEqual( self.event.event, \"subscribed\" )\r\n- self.assertEqual( self.event.id, 15819975 )\r\n- self.assertEqual( self.event.issue.number, 28 )\r\n- self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\" )\r\n+ self.assertEqual( self.event.commit_id, \"ed866fc43833802ab553e5ff8581c81bb00dd433\" )\r\n+ self.assertEqual( self.event.created_at, \"2012-05-27T07:29:25Z\" )\r\n+ self.assertEqual( self.event.event, \"referenced\" )\r\n+ self.assertEqual( self.event.id, 16348656 )\r\n+ self.assertEqual( self.event.issue.number, 30 )\r\n+ self.assertEqual( self.event.url, \"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\" )\r","additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"added","changes":45,"deletions":0,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testAddAndRemoveLabels.txt","filename":"test/ReplayData/Issue.testAddAndRemoveLabels.txt","patch":"@@ -0,0 +1,45 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4992'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"569c414d87e8ec43ec269a9e28bc2982\"'), ('date', 'Sun, 27 May 2012 09:04:01 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4991'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"b659c8dcc1212c71f826547c3cc7ae99\"'), ('date', 'Sun, 27 May 2012 09:04:02 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4990'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4989'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:03 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4988'), ('content-length', '237'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"46cc70bad88a09b559a5e67089005105\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4987'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:04 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4986'), ('content-length', '129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"5352ae15c8a5a36c6cace63be9367332\"'), ('date', 'Sun, 27 May 2012 09:04:05 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"}]\n+\n+POST /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4984'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 09:04:06 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","additions":45,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"added","changes":35,"deletions":0,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testDeleteAndSetLabels.txt","filename":"test/ReplayData/Issue.testDeleteAndSetLabels.txt","patch":"@@ -0,0 +1,35 @@\n+GET /repos/jacquev6/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4974'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fe2e942523eecb156d100829a6347516\"'), ('date', 'Sun, 27 May 2012 09:06:37 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"}\n+\n+GET /repos/jacquev6/PyGithub/labels/Question {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4973'), ('content-length', '107'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"931e58d337b2290717303141eda89cd7\"'), ('date', 'Sun, 27 May 2012 09:06:38 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4972'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d135d74d2ea2159d044676a220d41d3a\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"color\":\"e10c02\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\"},{\"color\":\"444444\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\"},{\"color\":\"02e10c\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\"}]\n+\n+DELETE /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+204\n+[('status', '204 No Content'), ('x-ratelimit-remaining', '4971'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d41d8cd98f00b204e9800998ecf8427e\"'), ('date', 'Sun, 27 May 2012 09:06:39 GMT')]\n+\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4970'), ('content-length', '2'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"d751713988987e9331980363e24189ce\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[]\n+\n+PUT /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} [\"Bug\", \"Question\"]\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4969'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:40 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4968'), ('content-length', '207'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"1a56634d9c1050a88592ff55ed8adc62\"'), ('date', 'Sun, 27 May 2012 09:06:41 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","additions":35,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"added","changes":5,"deletions":0,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/Issue.testGetLabels.txt","filename":"test/ReplayData/Issue.testGetLabels.txt","patch":"@@ -0,0 +1,5 @@\n+GET /repos/jacquev6/PyGithub/issues/28/labels {'Authorization': 'Basic login_and_password_removed'} null\n+200\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '335'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"c9f9beccb03030beaf7b80927da6fef6\"'), ('date', 'Sun, 27 May 2012 08:56:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}]\n+","additions":5,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"},{"status":"modified","changes":14,"deletions":7,"raw_url":"https://github.com/jacquev6/PyGithub/raw/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","blob_url":"https://github.com/jacquev6/PyGithub/blob/8a4f306d4b223682dd19410d4a9150636ebe4206/test/ReplayData/IssueEvent.setUp.txt","filename":"test/ReplayData/IssueEvent.setUp.txt","patch":"@@ -1,15 +1,15 @@\n GET /user {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4907'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"99c9bfb75395b749e9913a4729126fb5\"'), ('date', 'Sun, 27 May 2012 07:19:30 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"private_gists\":5,\"type\":\"User\",\"company\":\"Criteo\",\"location\":\"Paris, France\",\"hireable\":false,\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"bio\":\"\",\"following\":24,\"blog\":\"http://vincent-jacques.net\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"total_private_repos\":5,\"followers\":13,\"owned_private_repos\":5,\"disk_usage\":16976,\"collaborators\":0,\"html_url\":\"https://github.com/jacquev6\",\"url\":\"https://api.github.com/users/jacquev6\",\"name\":\"Vincent Jacques\",\"login\":\"jacquev6\",\"public_repos\":11,\"public_gists\":3,\"email\":\"vincent@vincent-jacques.net\",\"id\":327146,\"plan\":{\"private_repos\":5,\"collaborators\":1,\"name\":\"micro\",\"space\":614400},\"created_at\":\"2010-07-09T06:10:06Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"8974bb1628a3e3a6d3eb3b08c1b5a46b\"'), ('date', 'Sun, 27 May 2012 07:32:54 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"type\":\"User\",\"bio\":\"\",\"disk_usage\":16976,\"total_private_repos\":5,\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"owned_private_repos\":5,\"collaborators\":0,\"plan\":{\"collaborators\":1,\"private_repos\":5,\"name\":\"micro\",\"space\":614400},\"company\":\"Criteo\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"email\":\"vincent@vincent-jacques.net\",\"public_gists\":3,\"followers\":13,\"name\":\"Vincent Jacques\",\"created_at\":\"2010-07-09T06:10:06Z\",\"blog\":\"http://vincent-jacques.net\",\"location\":\"Paris, France\",\"hireable\":false,\"id\":327146,\"private_gists\":5,\"public_repos\":11,\"following\":24,\"html_url\":\"https://github.com/jacquev6\"}\n \n GET /repos/jacquev6/PyGithub {'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4906'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"4c20acf0b23f75bbf25106b1a04f65a5\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"description\":\"Python library implementing the full Github API v3\",\"full_name\":\"jacquev6/PyGithub\",\"has_wiki\":false,\"has_issues\":true,\"updated_at\":\"2012-05-27T06:55:28Z\",\"forks\":3,\"mirror_url\":null,\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"open_issues\":16,\"fork\":false,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"pushed_at\":\"2012-05-27T06:00:28Z\",\"size\":308,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"private\":false,\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"owner\":{\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"url\":\"https://api.github.com/users/jacquev6\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"has_downloads\":true,\"language\":\"Python\",\"watchers\":15,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"id\":3544490,\"permissions\":{\"admin\":true,\"pull\":true,\"push\":true},\"created_at\":\"2012-02-25T12:53:47Z\"}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4995'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"f1e4eb3993a364b66b68ec9db42405bd\"'), ('date', 'Sun, 27 May 2012 07:32:55 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"clone_url\":\"https://github.com/jacquev6/PyGithub.git\",\"has_downloads\":true,\"watchers\":15,\"updated_at\":\"2012-05-27T07:29:24Z\",\"permissions\":{\"pull\":true,\"admin\":true,\"push\":true},\"homepage\":\"http://vincent-jacques.net/PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub\",\"mirror_url\":null,\"has_wiki\":false,\"has_issues\":true,\"fork\":false,\"forks\":3,\"git_url\":\"git://github.com/jacquev6/PyGithub.git\",\"size\":308,\"private\":false,\"open_issues\":16,\"svn_url\":\"https://github.com/jacquev6/PyGithub\",\"owner\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"name\":\"PyGithub\",\"language\":\"Python\",\"description\":\"Python library implementing the full Github API v3\",\"ssh_url\":\"git@github.com:jacquev6/PyGithub.git\",\"pushed_at\":\"2012-05-27T07:29:24Z\",\"created_at\":\"2012-02-25T12:53:47Z\",\"id\":3544490,\"html_url\":\"https://github.com/jacquev6/PyGithub\",\"full_name\":\"jacquev6/PyGithub\"}\n \n-GET /repos/jacquev6/PyGithub/issues/events/15819975 {'Authorization': 'Basic login_and_password_removed'} null\n+GET /repos/jacquev6/PyGithub/issues/events/16348656 {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed'} null\n 200\n-[('status', '200 OK'), ('x-ratelimit-remaining', '4905'), ('content-length', '2430'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"a3d244842d23f92f69a23e21626fad11\"'), ('date', 'Sun, 27 May 2012 07:19:31 GMT'), ('content-type', 'application/json; charset=utf-8')]\n-{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/15819975\",\"issue\":{\"updated_at\":\"2012-05-26T14:59:33Z\",\"body\":\"Body edited by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/28\",\"comments\":0,\"milestone\":{\"creator\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/milestones/1\",\"number\":1,\"title\":\"Version 0.4\",\"due_on\":\"2012-03-13T07:00:00Z\",\"closed_issues\":3,\"open_issues\":0,\"created_at\":\"2012-03-08T12:22:10Z\",\"state\":\"closed\",\"description\":\"\",\"id\":93546},\"number\":28,\"assignee\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"closed_at\":\"2012-05-26T14:59:33Z\",\"title\":\"Issue created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug\",\"name\":\"Bug\",\"color\":\"e10c02\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management\",\"name\":\"Project management\",\"color\":\"444444\"},{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-19T10:38:23Z\",\"state\":\"closed\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146},\"id\":4653757,\"pull_request\":{\"diff_url\":null,\"patch_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/28\"},\"commit_id\":null,\"created_at\":\"2012-05-19T10:38:23Z\",\"event\":\"subscribed\",\"id\":15819975,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146}}\n+[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('content-length', '1384'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '\"fefecab09e7355d4ef9875677c2631da\"'), ('date', 'Sun, 27 May 2012 07:32:56 GMT'), ('content-type', 'application/json; charset=utf-8')]\n+{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/events/16348656\",\"issue\":{\"updated_at\":\"2012-05-27T07:27:51Z\",\"body\":\"Body created by PyGithub\",\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/issues/30\",\"comments\":0,\"milestone\":null,\"number\":30,\"assignee\":null,\"closed_at\":null,\"title\":\"Issue also created by PyGithub\",\"labels\":[{\"url\":\"https://api.github.com/repos/jacquev6/PyGithub/labels/Question\",\"name\":\"Question\",\"color\":\"02e10c\"}],\"created_at\":\"2012-05-27T05:40:15Z\",\"state\":\"open\",\"user\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"},\"id\":4769659,\"pull_request\":{\"patch_url\":null,\"diff_url\":null,\"html_url\":null},\"html_url\":\"https://github.com/jacquev6/PyGithub/issues/30\"},\"commit_id\":\"ed866fc43833802ab553e5ff8581c81bb00dd433\",\"created_at\":\"2012-05-27T07:29:25Z\",\"event\":\"referenced\",\"id\":16348656,\"actor\":{\"url\":\"https://api.github.com/users/jacquev6\",\"gravatar_id\":\"b68de5ae38616c296fa345d2b9df2225\",\"login\":\"jacquev6\",\"id\":327146,\"avatar_url\":\"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\"}}\n ","additions":7,"sha":"8a4f306d4b223682dd19410d4a9150636ebe4206"}] From 6725eceb62945b7fdf60770ef3efebe7ec59086e Mon Sep 17 00:00:00 2001 From: tison Date: Fri, 4 Nov 2022 08:22:48 +0800 Subject: [PATCH 13/32] Speed up get requested reviewers and teams for pr (#2349) --- github/PullRequest.py | 21 +++++++++++++++++++++ github/PullRequest.pyi | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/github/PullRequest.py b/github/PullRequest.py index 47d16721b5..a7e9bb7f49 100644 --- a/github/PullRequest.py +++ b/github/PullRequest.py @@ -53,6 +53,7 @@ import github.PullRequestMergeStatus import github.PullRequestPart import github.PullRequestReview +import github.Team from . import Consts @@ -355,6 +356,16 @@ def updated_at(self): self._completeIfNotSet(self._updated_at) return self._updated_at.value + @property + def requested_reviewers(self): + self._completeIfNotSet(self._requested_reviewers) + return self._requested_reviewers.value + + @property + def requested_teams(self): + self._completeIfNotSet(self._requested_teams) + return self._requested_teams.value + @property def url(self): """ @@ -984,6 +995,8 @@ def _initAttributes(self): self._updated_at = github.GithubObject.NotSet self._url = github.GithubObject.NotSet self._user = github.GithubObject.NotSet + self._requested_reviewers = github.GithubObject.NotSet + self._requested_teams = github.GithubObject.NotSet def _useAttributes(self, attributes): if "additions" in attributes: # pragma no branch @@ -1101,3 +1114,11 @@ def _useAttributes(self, attributes): self._user = self._makeClassAttribute( github.NamedUser.NamedUser, attributes["user"] ) + if "requested_reviewers" in attributes: + self._requested_reviewers = self._makeListOfClassesAttribute( + github.NamedUser.NamedUser, attributes["requested_reviewers"] + ) + if "requested_teams" in attributes: + self._requested_teams = self._makeListOfClassesAttribute( + github.Team.Team, attributes["requested_teams"] + ) diff --git a/github/PullRequest.pyi b/github/PullRequest.pyi index 597a85ad4a..7d37334786 100644 --- a/github/PullRequest.pyi +++ b/github/PullRequest.pyi @@ -30,6 +30,10 @@ class PullRequest(CompletableGithubObject): @property def assignees(self) -> List[NamedUser]: ... @property + def requested_reviewers(self) -> List[NamedUser]: ... + @property + def requested_teams(self) -> List[Team]: ... + @property def base(self) -> PullRequestPart: ... @property def body(self) -> str: ... From 948edc5bb370af5a1d0f4925dea2b17f68ef4927 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Sat, 5 Nov 2022 09:07:58 +0800 Subject: [PATCH 14/32] Publish version 1.57 --- doc/changes.rst | 16 ++++++++++++++++ setup.py | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/changes.rst b/doc/changes.rst index 0c18c95ce4..4124742dac 100644 --- a/doc/changes.rst +++ b/doc/changes.rst @@ -4,6 +4,22 @@ Change log Stable versions ~~~~~~~~~~~~~~~ +Version 1.57 (November 05, 2022) +----------------------------------- + +**Breaking Changes** + +* Add support for Python 3.11, drop support for Python 3.6 (#2332) (1e2f10dc) + +**Bug Fixes & Improvements** + +* Speed up get requested reviewers and teams for pr (#2349) (6725eceb) +* [WorkflowRun] - Add missing attributes (`run_started_at` & `run_attempt`), remove deprecated `unicode` type (#2273) (3a6235b5) +* Add support for repository autolink references (#2016) (0fadd6be) +* Add retry and pool_size to typing (#2151) (784a3efd) +* Fix/types for repo topic team (#2341) (db9337a4) +* Add class Artifact (#2313) (#2319) (437ff845) + Version 1.56 (October 13, 2022) ----------------------------------- diff --git a/setup.py b/setup.py index bd22abb837..e46d5cf143 100755 --- a/setup.py +++ b/setup.py @@ -44,7 +44,7 @@ import setuptools -version = "1.56" +version = "1.57" if __name__ == "__main__": From 7902351d4fa501dc108dbf3724e93831d922f582 Mon Sep 17 00:00:00 2001 From: Eric Nieuwland Date: Wed, 9 Nov 2022 07:59:34 +0100 Subject: [PATCH 15/32] Add code scanning alerts (#2227) --- doc/examples/Repository.rst | 25 +++ github/CodeScanAlert.py | 191 ++++++++++++++++++ github/CodeScanAlert.pyi | 62 ++++++ github/CodeScanAlertInstance.py | 125 ++++++++++++ github/CodeScanAlertInstance.pyi | 49 +++++ github/CodeScanAlertInstanceLocation.py | 98 +++++++++ github/CodeScanAlertInstanceLocation.pyi | 41 ++++ github/CodeScanRule.py | 89 ++++++++ github/CodeScanRule.pyi | 40 ++++ github/CodeScanTool.py | 73 +++++++ github/CodeScanTool.pyi | 36 ++++ github/Repository.py | 14 ++ .../Repository.testCodeScanAlerts.txt | 22 ++ tests/Repository.py | 117 +++++++++++ 14 files changed, 982 insertions(+) create mode 100644 github/CodeScanAlert.py create mode 100644 github/CodeScanAlert.pyi create mode 100644 github/CodeScanAlertInstance.py create mode 100644 github/CodeScanAlertInstance.pyi create mode 100644 github/CodeScanAlertInstanceLocation.py create mode 100644 github/CodeScanAlertInstanceLocation.pyi create mode 100644 github/CodeScanRule.py create mode 100644 github/CodeScanRule.pyi create mode 100644 github/CodeScanTool.py create mode 100644 github/CodeScanTool.pyi create mode 100644 tests/ReplayData/Repository.testCodeScanAlerts.txt diff --git a/doc/examples/Repository.rst b/doc/examples/Repository.rst index a265350e45..9d3ef6a91f 100644 --- a/doc/examples/Repository.rst +++ b/doc/examples/Repository.rst @@ -35,6 +35,31 @@ Get list of open issues Issue(title="Is suspended_users for github enterprise implemented in NamedUser?", number=900) Issue(title="Adding migration api wrapper", number=899) +Get list of code scanning alerts +-------------------------------- + +.. code-block:: python + + >>> repo = g.get_repo("PyGithub/PyGithub") + >>> codescan_alerts = repo.get_codescan_alerts() + >>> for alert in codescan_alerts: + ... print(alert.number, alert.created_at, alert.dismissed_at) + ... print(" ", alert.tool.name, alert.tool.version, alert.tool.guid) + ... print(" ", alert.rule.name alert.rule.security_severity_level alert.rule.severity) + ... print(" ", alert.rule.description) + ... print(" ", alert.most_recent_instance.ref, alert.most_recent_instance.state) + ... print(" ", alert.most_recent_instance.location) + ... print(" ", alert.most_recent_instance.message['text']) + ... + 3 1984-02-29 12:34:56 None + CodeQL 2.6.1 None + py/weak-sensitive-data-hashing high warning + Use of a broken or weak cryptographic hashing algorithm on sensitive data + refs/heads/master | open + src/secrets/rats.py @ l42:c13-l42:c69 + Sensitive data (password) is used in a hashing algorithm (SHA1) that is insecure⤶ + for password hashing, since it is not a computationally expensive hash function. + Get all the labels of the repository ------------------------------------ diff --git a/github/CodeScanAlert.py b/github/CodeScanAlert.py new file mode 100644 index 0000000000..da38633600 --- /dev/null +++ b/github/CodeScanAlert.py @@ -0,0 +1,191 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +import github.CodeScanAlertInstance +import github.CodeScanRule +import github.CodeScanTool +import github.GithubObject +import github.NamedUser +import github.PaginatedList + + +class CodeScanAlert(github.GithubObject.NonCompletableGithubObject): + """ + This class represents alerts from code scanning. + The reference can be found here https://docs.github.com/en/rest/reference/code-scanning. + """ + + def __repr__(self): + return self.get__repr__({"number": self.number}) + + @property + def number(self): + """ + :type: int + """ + return self._number.value + + @property + def rule(self): + """ + :type: :class: `github.CodeScanRule.CodeScanRule` + """ + return self._rule.value + + @property + def tool(self): + """ + :type: :class: `github.CodeScanTool.CodeScanTool` + """ + return self._tool.value + + @property + def created_at(self): + """ + :type: datetime + """ + return self._created_at.value + + @property + def dismissed_at(self): + """ + :type: datetime + """ + return self._dismissed_at.value + + @property + def dismissed_by(self): + """ + :type: :class: `github.NamedUser.NamedUser` + """ + return self._dismissed_by.value + + @property + def dismissed_reason(self): + """ + :type: str + """ + return self._dismissed_reason.value + + @property + def url(self): + """ + :type: string + """ + return self._url.value + + @property + def html_url(self): + """ + :type: string + """ + return self._html_url.value + + @property + def instances_url(self): + """ + :type: string + """ + return self._instances_url.value + + @property + def most_recent_instance(self): + """ + :type: :class: github.CodeScanAlertInstance.CodeScanAlertInstance + """ + return self._most_recent_instance.value + + @property + def state(self): + """ + :type: str + """ + return self._state.value + + def get_instances(self): + """ + :calls: `GET` on the URL for instances as provided by Github + :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.CodeScanAlertInstance.CodeScanAlertInstance` + """ + return github.PaginatedList.PaginatedList( + github.CodeScanAlertInstance.CodeScanAlertInstance, + self._requester, + self.instances_url, + None, + ) + + def _initAttributes(self): + self._number = github.GithubObject.NotSet + self._rule = github.GithubObject.NotSet + self._tool = github.GithubObject.NotSet + + self._created_at = github.GithubObject.NotSet + self._dismissed_at = github.GithubObject.NotSet + self._dismissed_by = github.GithubObject.NotSet + self._dismissed_reason = github.GithubObject.NotSet + + self._url = github.GithubObject.NotSet + self._html_url = github.GithubObject.NotSet + self._instances_url = github.GithubObject.NotSet + + self._most_recent_instance = github.GithubObject.NotSet + self._state = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "number" in attributes: # pragma no branch + self._number = self._makeIntAttribute(attributes["number"]) + if "rule" in attributes: # pragma no branch + self._rule = self._makeClassAttribute( + github.CodeScanRule.CodeScanRule, attributes["rule"] + ) + if "tool" in attributes: # pragma no branch + self._tool = self._makeClassAttribute( + github.CodeScanTool.CodeScanTool, attributes["tool"] + ) + + if "created_at" in attributes: # pragma no branch + self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) + if "dismissed_at" in attributes: # pragma no branch + self._dismissed_at = self._makeDatetimeAttribute(attributes["dismissed_at"]) + if "dismissed_by" in attributes: # pragma no branch + self._dismissed_by = self._makeClassAttribute( + github.NamedUser.NamedUser, attributes["dismissed_by"] + ) + if "dismissed_reason" in attributes: # pragma no branch + self._dismissed_reason = self._makeStringAttribute( + attributes["dismissed_reason"] + ) + + if "url" in attributes: # pragma no branch + self._url = self._makeStringAttribute(attributes["url"]) + if "html_url" in attributes: # pragma no branch + self._html_url = self._makeStringAttribute(attributes["html_url"]) + if "instances_url" in attributes: # pragma no branch + self._instances_url = self._makeStringAttribute(attributes["instances_url"]) + + if "most_recent_instance" in attributes: # pragma no branch + self._most_recent_instance = self._makeClassAttribute( + github.CodeScanAlertInstance.CodeScanAlertInstance, + attributes["most_recent_instance"], + ) + if "state" in attributes: # pragma no branch + self._state = self._makeStringAttribute(attributes["state"]) diff --git a/github/CodeScanAlert.pyi b/github/CodeScanAlert.pyi new file mode 100644 index 0000000000..51a42047bf --- /dev/null +++ b/github/CodeScanAlert.pyi @@ -0,0 +1,62 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +from typing import Any, Dict +from datetime import datetime + +import github.GithubObject +import github.PaginatedList +import github.CodeScanRule +import github.CodeScanTool +import github.CodeScanAlertInstance + +class CodeScanAlert(github.GithubObject.NonCompletableGithubObject): + def __repr__(self) -> str: ... + @property + def number(self) -> int: ... + @property + def rule(self) -> github.CodeScanRule.CodeScanRule: ... + @property + def tool(self) -> github.CodeScanTool.CodeScanTool: ... + @property + def created_at(self) -> datetime: ... + @property + def dismissed_at(self) -> datetime: ... + @property + def dismissed_by(self) -> dict: ... + @property + def dismissed_reason(self) -> str: ... + @property + def url(self) -> str: ... + @property + def html_url(self) -> str: ... + @property + def instances_url(self) -> str: ... + @property + def most_recent_instance( + self, + ) -> github.CodeScanAlertInstance.CodeScanAlertInstance: ... + @property + def state(self) -> str: ... + def get_instances(self) -> github.PaginatedList.PaginatedList: ... + def _initAttributes(self) -> None: ... + def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... diff --git a/github/CodeScanAlertInstance.py b/github/CodeScanAlertInstance.py new file mode 100644 index 0000000000..62ce522474 --- /dev/null +++ b/github/CodeScanAlertInstance.py @@ -0,0 +1,125 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +import github.CodeScanAlertInstanceLocation +import github.GithubObject + + +class CodeScanAlertInstance(github.GithubObject.NonCompletableGithubObject): + """ + This class represents code scanning alert instances. + The reference can be found here https://docs.github.com/en/rest/reference/code-scanning. + """ + + def __repr__(self): + return self.get__repr__({"ref": self.ref, "analysis_key": self.analysis_key}) + + @property + def ref(self): + """ + :type: str + """ + return self._ref.value + + @property + def analysis_key(self): + """ + :type: str + """ + return self._analysis_key.value + + @property + def environment(self): + """ + :type: str + """ + return self._environment.value + + @property + def state(self): + """ + :type: str + """ + return self._state.value + + @property + def commit_sha(self): + """ + :type: str + """ + return self._commit_sha.value + + @property + def message(self): + """ + :type: str + """ + return self._message.value + + @property + def location(self): + """ + :type: :class: `github.CodeScanAlertInstanceLocation.CodeScanAlertInstanceLocation` + """ + return self._location.value + + @property + def classifications(self): + """ + :type: list of str + """ + return self._classifications.value + + def _initAttributes(self): + self._ref = github.GithubObject.NotSet + self._analysis_key = github.GithubObject.NotSet + self._environment = github.GithubObject.NotSet + self._state = github.GithubObject.NotSet + self._commit_sha = github.GithubObject.NotSet + self._message = github.GithubObject.NotSet + self._location = github.GithubObject.NotSet + self._classifications = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "ref" in attributes: # pragma no branch + self._ref = self._makeStringAttribute(attributes["ref"]) + if "analysis_key" in attributes: # pragma no branch + self._analysis_key = self._makeStringAttribute(attributes["analysis_key"]) + if "environment" in attributes: # pragma no branch + self._environment = self._makeStringAttribute(attributes["environment"]) + if "state" in attributes: # pragma no branch + self._state = self._makeStringAttribute(attributes["state"]) + if "environment" in attributes: # pragma no branch + self._environment = self._makeStringAttribute(attributes["environment"]) + if "commit_sha" in attributes: # pragma no branch + self._commit_sha = self._makeStringAttribute(attributes["commit_sha"]) + if "message" in attributes: # pragma no branch + self._message = self._makeDictAttribute(attributes["message"]) + if "location" in attributes: # pragma no branch + self._location = self._makeClassAttribute( + github.CodeScanAlertInstanceLocation.CodeScanAlertInstanceLocation, + attributes["location"], + ) + if "classifications" in attributes: # pragma no branch + self._classifications = self._makeListOfStringsAttribute( + attributes["classifications"] + ) diff --git a/github/CodeScanAlertInstance.pyi b/github/CodeScanAlertInstance.pyi new file mode 100644 index 0000000000..b4b7e0e51d --- /dev/null +++ b/github/CodeScanAlertInstance.pyi @@ -0,0 +1,49 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +from typing import Any, Dict + +import github.GithubObject +import github.CodeScanAlertInstanceLocation + +class CodeScanAlertInstance(github.GithubObject.NonCompletableGithubObject): + def __repr__(self) -> str: ... + @property + def ref(self) -> str: ... + @property + def analysis_key(self) -> str: ... + @property + def environment(self) -> str: ... + @property + def state(self) -> str: ... + @property + def commit_sha(self) -> str: ... + @property + def message(self) -> str: ... + @property + def location( + self, + ) -> github.CodeScanAlertInstanceLocation.CodeScanAlertInstanceLocation: ... + @property + def classifications(self) -> list[str]: ... + def _initAttributes(self) -> None: ... + def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... diff --git a/github/CodeScanAlertInstanceLocation.py b/github/CodeScanAlertInstanceLocation.py new file mode 100644 index 0000000000..92b6555e99 --- /dev/null +++ b/github/CodeScanAlertInstanceLocation.py @@ -0,0 +1,98 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +import github.GithubObject + + +class CodeScanAlertInstanceLocation(github.GithubObject.NonCompletableGithubObject): + """ + This class represents code scanning alert instance locations. + The reference can be found here https://docs.github.com/en/rest/reference/code-scanning. + """ + + def __str__(self): + return f"{self.path} @ l{self.start_line}:c{self.start_column}-l{self.end_line}:c{self.end_column}" + + def __repr__(self): + return self.get__repr__( + { + "path": self.path, + "start_line": self.start_line, + "start_column": self.start_column, + "end_line": self.end_line, + "end_column": self.end_column, + } + ) + + @property + def path(self): + """ + :type: str + """ + return self._path.value + + @property + def start_line(self): + """ + :type: int + """ + return self._start_line.value + + @property + def start_column(self): + """ + :type: int + """ + return self._start_column.value + + @property + def end_line(self): + """ + :type: int + """ + return self._end_line.value + + @property + def end_column(self): + """ + :type: int + """ + return self._end_column.value + + def _initAttributes(self): + self._path = github.GithubObject.NotSet + self._start_line = github.GithubObject.NotSet + self._start_column = github.GithubObject.NotSet + self._end_line = github.GithubObject.NotSet + self._end_column = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "path" in attributes: # pragma no branch + self._path = self._makeStringAttribute(attributes["path"]) + if "start_line" in attributes: # pragma no branch + self._start_line = self._makeIntAttribute(attributes["start_line"]) + if "start_column" in attributes: # pragma no branch + self._start_column = self._makeIntAttribute(attributes["start_column"]) + if "end_line" in attributes: # pragma no branch + self._end_line = self._makeIntAttribute(attributes["end_line"]) + if "end_column" in attributes: # pragma no branch + self._end_column = self._makeIntAttribute(attributes["end_column"]) diff --git a/github/CodeScanAlertInstanceLocation.pyi b/github/CodeScanAlertInstanceLocation.pyi new file mode 100644 index 0000000000..0d8ab5e0ff --- /dev/null +++ b/github/CodeScanAlertInstanceLocation.pyi @@ -0,0 +1,41 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +from typing import Any, Dict + +import github.GithubObject + +class CodeScanAlertInstanceLocation(github.GithubObject.NonCompletableGithubObject): + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + @property + def path(self) -> str: ... + @property + def start_line(self) -> int: ... + @property + def start_column(self) -> int: ... + @property + def end_line(self) -> int: ... + @property + def end_column(self) -> int: ... + def _initAttributes(self) -> None: ... + def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... diff --git a/github/CodeScanRule.py b/github/CodeScanRule.py new file mode 100644 index 0000000000..9f7e341249 --- /dev/null +++ b/github/CodeScanRule.py @@ -0,0 +1,89 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +import github.GithubObject + + +class CodeScanRule(github.GithubObject.NonCompletableGithubObject): + """ + This class represents Alerts from code scanning. + The reference can be found here https://docs.github.com/en/rest/reference/code-scanning. + """ + + def __repr__(self): + return self.get__repr__({"id": self.id, "name": self.name}) + + @property + def id(self): + """ + :type: str + """ + return self._id.value + + @property + def name(self): + """ + :type: str + """ + return self._name.value + + @property + def severity(self): + """ + :type: str + """ + return self._severity.value + + @property + def security_severity_level(self): + """ + :type: str + """ + return self._security_severity_level.value + + @property + def description(self): + """ + :type: str + """ + return self._description.value + + def _initAttributes(self): + self._id = github.GithubObject.NotSet + self._name = github.GithubObject.NotSet + self._severity = github.GithubObject.NotSet + self._security_severity_level = github.GithubObject.NotSet + self._description = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "id" in attributes: # pragma no branch + self._id = self._makeStringAttribute(attributes["id"]) + if "name" in attributes: # pragma no branch + self._name = self._makeStringAttribute(attributes["name"]) + if "severity" in attributes: # pragma no branch + self._severity = self._makeStringAttribute(attributes["severity"]) + if "security_severity_level" in attributes: # pragma no branch + self._security_severity_level = self._makeStringAttribute( + attributes["security_severity_level"] + ) + if "description" in attributes: # pragma no branch + self._description = self._makeStringAttribute(attributes["description"]) diff --git a/github/CodeScanRule.pyi b/github/CodeScanRule.pyi new file mode 100644 index 0000000000..c4b30feb98 --- /dev/null +++ b/github/CodeScanRule.pyi @@ -0,0 +1,40 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +from typing import Any, Dict + +import github.GithubObject + +class CodeScanRule(github.GithubObject.NonCompletableGithubObject): + def __repr__(self) -> str: ... + @property + def id(self) -> str: ... + @property + def name(self) -> str: ... + @property + def severity(self) -> str: ... + @property + def security_severity_level(self) -> str: ... + @property + def description(self) -> str: ... + def _initAttributes(self) -> None: ... + def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... diff --git a/github/CodeScanTool.py b/github/CodeScanTool.py new file mode 100644 index 0000000000..afde1a02bc --- /dev/null +++ b/github/CodeScanTool.py @@ -0,0 +1,73 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +import github.GithubObject + + +class CodeScanTool(github.GithubObject.NonCompletableGithubObject): + """ + This class represents code scanning tools. + The reference can be found here https://docs.github.com/en/rest/reference/code-scanning. + """ + + def __repr__(self): + return self.get__repr__( + { + "guid": self.guid, + "name": self.name, + "version": self.version, + } + ) + + @property + def name(self): + """ + :type: str + """ + return self._name.value + + @property + def version(self): + """ + :type: str + """ + return self._version.value + + @property + def guid(self): + """ + :type: str + """ + return self._guid.value + + def _initAttributes(self): + self._name = github.GithubObject.NotSet + self._version = github.GithubObject.NotSet + self._guid = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "name" in attributes: # pragma no branch + self._name = self._makeStringAttribute(attributes["name"]) + if "version" in attributes: # pragma no branch + self._version = self._makeStringAttribute(attributes["version"]) + if "guid" in attributes: # pragma no branch + self._guid = self._makeStringAttribute(attributes["guid"]) diff --git a/github/CodeScanTool.pyi b/github/CodeScanTool.pyi new file mode 100644 index 0000000000..21a6b8dc9b --- /dev/null +++ b/github/CodeScanTool.pyi @@ -0,0 +1,36 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2022 Eric Nieuwland # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + +from typing import Any, Dict + +import github.GithubObject + +class CodeScanTool(github.GithubObject.NonCompletableGithubObject): + def __repr__(self) -> str: ... + @property + def name(self) -> str: ... + @property + def version(self) -> str: ... + @property + def guid(self) -> str: ... + def _initAttributes(self) -> None: ... + def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... diff --git a/github/Repository.py b/github/Repository.py index 1090c8ade7..954dd767d2 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -66,6 +66,7 @@ # Copyright 2018 Leying Chen # # Copyright 2020 Pascal Hofmann # # Copyright 2022 Aleksei Fedotov # +# Copyright 2022 Eric Nieuwland # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -98,6 +99,7 @@ import github.CheckRun import github.CheckSuite import github.Clones +import github.CodeScanAlert import github.Commit import github.CommitComment import github.Comparison @@ -3772,6 +3774,18 @@ def get_artifact(self, artifact_id): return github.Artifact.Artifact(self._requester, headers, data, completed=True) + def get_codescan_alerts(self): + """ + :calls: `GET https://api.github.com/repos/{owner}/{repo}/code-scanning/alerts `_ + :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.CodeScanAlert.CodeScanAlert` + """ + return github.PaginatedList.PaginatedList( + github.CodeScanAlert.CodeScanAlert, + self._requester, + f"{self.url}/code-scanning/alerts", + None, + ) + def _initAttributes(self): self._allow_merge_commit = github.GithubObject.NotSet self._allow_rebase_merge = github.GithubObject.NotSet diff --git a/tests/ReplayData/Repository.testCodeScanAlerts.txt b/tests/ReplayData/Repository.testCodeScanAlerts.txt new file mode 100644 index 0000000000..e2923a65d1 --- /dev/null +++ b/tests/ReplayData/Repository.testCodeScanAlerts.txt @@ -0,0 +1,22 @@ +https +GET +api.github.com +None +/repos/jacquev6/PyGithub/code-scanning/alerts +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4963'), ('content-length', '318'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"3ce61bc2417a6a4f7b47976a7969c711"'), ('date', 'Sun, 20 May 2012 12:10:52 GMT'), ('content-type', 'application/json; charset=utf-8')] +[{"number": 6, "created_at": "2021-06-29T12:28:30Z", "dismissed_at": "2021-06-30T05:05:05Z", "dismissed_by": {"url": "dismissed_by.url", "avatar_url": "dismissed_by.avatar_url", "gravatar_id": "dismissed_by.gravatar_id", "login": "dismisser.login", "id": 42}, "dismissed_reason": "Won't tell", "state": "open", "url": "https://api.github.com/repos/jacquev6/PyGithub/code-scanning/alerts/6", "html_url": "https://github.com/jacquev6/PyGithub/security/code-scanning/6", "instances_url": "https://api.github.com/repos/jacquev6/PyGithub/code-scanning/alerts/6/instances", "most_recent_instance": {"analysis_key": ".github/workflows/codeql-analysis.yml:analyze", "ref": "refs/heads/master", "state": "open", "classifications": ["stupid typo"], "commit_sha": "deadbeef", "environment": "{language:python}", "message": {"text": "Awful stuff might happen."}, "location": {"path": "tests/ReplayData/Repository.testCodeScanAlerts.txt", "start_line": 10, "start_column": 2, "end_line": 10, "end_column": 48}}, "rule": {"id": "py/rule-id", "name": "py/rule-name", "security_severity_level": "high", "severity": "warning", "description": "Bad practice"}, "tool": {"guid": null, "name": "CodeQL", "version": "2.5.7"}}] + +https +GET +api.github.com +None +/repos/jacquev6/PyGithub/code-scanning/alerts/6/instances +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4963'), ('content-length', '318'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"3ce61bc2417a6a4f7b47976a7969c711"'), ('date', 'Sun, 20 May 2012 12:10:52 GMT'), ('content-type', 'application/json; charset=utf-8')] +[{"analysis_key": "instances[0].analysis_key", "ref": "instances[0].ref", "state": "instances[0].state", "classifications": ["instances[0].classifications"], "commit_sha": "instances[0].commit_sha", "environment": "instances[0].environment", "message": {"text": "instances[0].message"}, "location": {"path": "tests/ReplayData/Repository.testCodeScanAlerts.txt", "start_line": 10, "start_column": 2, "end_line": 10, "end_column": 48}}, {"analysis_key": "instances[1].analysis_key", "ref": "instances[1].ref", "state": "instances[1].state", "classifications": ["instances[1].classifications"], "commit_sha": "instances[1].commit_sha", "environment": "instances[1].environment", "message": {"text": "instances[1].message"}, "location": {"path": "tests/ReplayData/Repository.testCodeScanAlerts.txt", "start_line": 20, "start_column": 17, "end_line": 20, "end_column": 42}}] + diff --git a/tests/Repository.py b/tests/Repository.py index 95bf5e4fbd..b34a10411b 100644 --- a/tests/Repository.py +++ b/tests/Repository.py @@ -457,6 +457,123 @@ def testCreateSecret(self, encrypt): def testDeleteSecret(self): self.assertTrue(self.repo.delete_secret("secret_name")) + def testCodeScanAlerts(self): + codescan_alerts = self.repo.get_codescan_alerts() + self.assertListKeyEqual( + codescan_alerts, + lambda c: c.number, + [ + 6, + ], + ) + codescan_alert = codescan_alerts[0] + self.assertEqual(repr(codescan_alert), "CodeScanAlert(number=6)") + self.assertEqual(codescan_alert.state, "open") + self.assertEqual( + codescan_alert.url, + "https://api.github.com/repos/jacquev6/PyGithub/code-scanning/alerts/6", + ) + self.assertEqual( + codescan_alert.created_at, + datetime.datetime(2021, 6, 29, 12, 28, 30), + ) + self.assertEqual( + codescan_alert.dismissed_at, + datetime.datetime(2021, 6, 30, 5, 5, 5), + ) + self.assertEqual(codescan_alert.dismissed_reason, "Won't tell") + dismissed_by = codescan_alert.dismissed_by + self.assertEqual(dismissed_by.login, "dismisser.login") + instance = codescan_alert.most_recent_instance + self.assertEqual( + repr(instance), + "CodeScanAlertInstance(" + 'ref="refs/heads/master", ' + 'analysis_key=".github/workflows/codeql-analysis.yml:analyze"' + ")", + ) + self.assertEqual(instance.ref, "refs/heads/master") + self.assertEqual( + instance.analysis_key, ".github/workflows/codeql-analysis.yml:analyze" + ) + self.assertEqual(instance.environment, "{language:python}") + self.assertEqual(instance.state, "open") + self.assertListEqual(instance.classifications, ["stupid typo"]) + self.assertDictEqual(instance.message, {"text": "Awful stuff might happen."}) + self.assertEqual(instance.commit_sha, "deadbeef") + location = instance.location + self.assertEqual( + str(location), + "tests/ReplayData/Repository.testCodeScanAlerts.txt @ l10:c2-l10:c48", + ) + self.assertEqual( + repr(location), + "CodeScanAlertInstanceLocation(" + "start_line=10, start_column=2, " + 'path="tests/ReplayData/Repository.testCodeScanAlerts.txt", ' + "end_line=10, end_column=48" + ")", + ) + self.assertEqual( + location.path, "tests/ReplayData/Repository.testCodeScanAlerts.txt" + ) + self.assertEqual(location.start_line, 10) + self.assertEqual(location.start_column, 2) + self.assertEqual(location.end_line, 10) + self.assertEqual(location.end_column, 48) + rule = codescan_alert.rule + self.assertEqual( + repr(rule), 'CodeScanRule(name="py/rule-name", id="py/rule-id")' + ) + self.assertEqual(rule.id, "py/rule-id") + self.assertEqual(rule.name, "py/rule-name") + self.assertEqual(rule.security_severity_level, "high") + self.assertEqual(rule.severity, "warning") + self.assertEqual(rule.description, "Bad practice") + tool = codescan_alert.tool + self.assertEqual( + repr(tool), 'CodeScanTool(version="2.5.7", name="CodeQL", guid=None)' + ) + self.assertEqual(tool.guid, None) + self.assertEqual(tool.name, "CodeQL") + self.assertEqual(tool.version, "2.5.7") + instances = list(codescan_alert.get_instances()) + self.assertEqual(len(instances), 2) + # + instance = instances[0] + self.assertEqual(instance.ref, "instances[0].ref") + self.assertEqual(instance.analysis_key, "instances[0].analysis_key") + self.assertEqual(instance.environment, "instances[0].environment") + self.assertEqual(instance.state, "instances[0].state") + self.assertListEqual(instance.classifications, ["instances[0].classifications"]) + self.assertDictEqual(instance.message, {"text": "instances[0].message"}) + self.assertEqual(instance.commit_sha, "instances[0].commit_sha") + location = instance.location + self.assertEqual( + location.path, "tests/ReplayData/Repository.testCodeScanAlerts.txt" + ) + self.assertEqual(location.start_line, 10) + self.assertEqual(location.start_column, 2) + self.assertEqual(location.end_line, 10) + self.assertEqual(location.end_column, 48) + # + instance = instances[1] + self.assertEqual(instance.ref, "instances[1].ref") + self.assertEqual(instance.analysis_key, "instances[1].analysis_key") + self.assertEqual(instance.environment, "instances[1].environment") + self.assertEqual(instance.state, "instances[1].state") + self.assertListEqual(instance.classifications, ["instances[1].classifications"]) + self.assertDictEqual(instance.message, {"text": "instances[1].message"}) + self.assertEqual(instance.commit_sha, "instances[1].commit_sha") + location = instance.location + self.assertEqual( + location.path, "tests/ReplayData/Repository.testCodeScanAlerts.txt" + ) + self.assertEqual(location.start_line, 20) + self.assertEqual(location.start_column, 17) + self.assertEqual(location.end_line, 20) + self.assertEqual(location.end_column, 42) + def testCollaborators(self): lyloa = self.g.get_user("Lyloa") self.assertFalse(self.repo.has_in_collaborators(lyloa)) From 6c53e5442a80094025b390772d3e00a0d8443a75 Mon Sep 17 00:00:00 2001 From: Ibrahim Hussaini Date: Thu, 15 Dec 2022 14:05:02 +1100 Subject: [PATCH 16/32] feat: add allow_forking to Repository (#2380) * chore(dependency): flake8 has moved to github * feat: add allow_forking to Repository * chore: linting Co-authored-by: hussaiia --- .pre-commit-config.yaml | 2 +- github/Repository.py | 17 +++++++++++++++++ .../Repository.testEditWithAllArguments.txt | 4 ++-- tests/Repository.py | 2 ++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 489427758f..17da882816 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,7 @@ repos: rev: v5.10.1 hooks: - id: isort - - repo: https://gitlab.com/pycqa/flake8 + - repo: https://github.com/pycqa/flake8 rev: 3.9.2 hooks: - id: flake8 diff --git a/github/Repository.py b/github/Repository.py index 954dd767d2..2575100675 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -158,6 +158,14 @@ class Repository(github.GithubObject.CompletableGithubObject): def __repr__(self): return self.get__repr__({"full_name": self._full_name.value}) + @property + def allow_forking(self): + """ + :type: bool + """ + self._completeIfNotSet(self._allow_forking) + return self._allow_forking.value + @property def allow_merge_commit(self): """ @@ -1552,6 +1560,7 @@ def edit( has_wiki=github.GithubObject.NotSet, has_downloads=github.GithubObject.NotSet, default_branch=github.GithubObject.NotSet, + allow_forking=github.GithubObject.NotSet, allow_squash_merge=github.GithubObject.NotSet, allow_merge_commit=github.GithubObject.NotSet, allow_rebase_merge=github.GithubObject.NotSet, @@ -1603,6 +1612,9 @@ def edit( assert default_branch is github.GithubObject.NotSet or isinstance( default_branch, str ), default_branch + assert allow_forking is github.GithubObject.NotSet or isinstance( + allow_forking, bool + ), allow_forking assert allow_squash_merge is github.GithubObject.NotSet or isinstance( allow_squash_merge, bool ), allow_squash_merge @@ -1639,6 +1651,8 @@ def edit( post_parameters["default_branch"] = default_branch if allow_squash_merge is not github.GithubObject.NotSet: post_parameters["allow_squash_merge"] = allow_squash_merge + if allow_forking is not github.GithubObject.NotSet: + post_parameters["allow_forking"] = allow_forking if allow_merge_commit is not github.GithubObject.NotSet: post_parameters["allow_merge_commit"] = allow_merge_commit if allow_rebase_merge is not github.GithubObject.NotSet: @@ -3787,6 +3801,7 @@ def get_codescan_alerts(self): ) def _initAttributes(self): + self._allow_forking = github.GithubObject.NotSet self._allow_merge_commit = github.GithubObject.NotSet self._allow_rebase_merge = github.GithubObject.NotSet self._allow_squash_merge = github.GithubObject.NotSet @@ -3873,6 +3888,8 @@ def _initAttributes(self): self._watchers_count = github.GithubObject.NotSet def _useAttributes(self, attributes): + if "allow_forking" in attributes: # pragma no branch + self._allow_forking = self._makeBoolAttribute(attributes["allow_forking"]) if "allow_merge_commit" in attributes: # pragma no branch self._allow_merge_commit = self._makeBoolAttribute( attributes["allow_merge_commit"] diff --git a/tests/ReplayData/Repository.testEditWithAllArguments.txt b/tests/ReplayData/Repository.testEditWithAllArguments.txt index 9e02090a6c..d0d1e36fc9 100644 --- a/tests/ReplayData/Repository.testEditWithAllArguments.txt +++ b/tests/ReplayData/Repository.testEditWithAllArguments.txt @@ -4,10 +4,10 @@ api.github.com None /repos/jacquev6/PyGithub {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} -{"has_wiki": false, "name": "PyGithub", "has_downloads": true, "has_issues": true, "homepage": "http://vincent-jacques.net/PyGithub", "private": true, "description": "Description edited by PyGithub", "has_projects": false, "allow_squash_merge": true, "allow_merge_commit": true, "allow_rebase_merge": true, "delete_branch_on_merge": true} +{"has_wiki": false, "name": "PyGithub", "has_downloads": true, "has_issues": true, "homepage": "http://vincent-jacques.net/PyGithub", "private": true, "description": "Description edited by PyGithub", "has_projects": false, "allow_forking": true, "allow_squash_merge": true, "allow_merge_commit": true, "allow_rebase_merge": true, "delete_branch_on_merge": true} 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4953'), ('content-length', '1109'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"749313ec2d171323deb61f9f4c85e84f"'), ('date', 'Sat, 26 May 2012 11:22:13 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"clone_url":"https://github.com/jacquev6/PyGithub.git","has_downloads":true,"watchers":13,"updated_at":"2012-05-26T11:22:13Z","permissions":{"pull":true,"admin":true,"push":true},"homepage":"http://vincent-jacques.net/PyGithub","url":"https://api.github.com/repos/jacquev6/PyGithub","has_wiki":false,"has_issues":true,"fork":false,"forks":2,"size":412,"git_url":"git://github.com/jacquev6/PyGithub.git","private":false,"open_issues":16,"mirror_url":null,"svn_url":"https://github.com/jacquev6/PyGithub","owner":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"name":"PyGithub","language":"Python","description":"Description edited by PyGithub","ssh_url":"git@github.com:jacquev6/PyGithub.git","pushed_at":"2012-05-26T10:01:38Z","created_at":"2012-02-25T12:53:47Z","id":3544490,"html_url":"https://github.com/jacquev6/PyGithub","full_name":"jacquev6/PyGithub", "has_projects": false, "allow_squash_merge": true, "allow_merge_commit": true, "allow_rebase_merge": true, "delete_branch_on_merge": true} +{"clone_url":"https://github.com/jacquev6/PyGithub.git","has_downloads":true,"watchers":13,"updated_at":"2012-05-26T11:22:13Z","permissions":{"pull":true,"admin":true,"push":true},"homepage":"http://vincent-jacques.net/PyGithub","url":"https://api.github.com/repos/jacquev6/PyGithub","has_wiki":false,"has_issues":true,"fork":false,"forks":2,"size":412,"git_url":"git://github.com/jacquev6/PyGithub.git","private":false,"open_issues":16,"mirror_url":null,"svn_url":"https://github.com/jacquev6/PyGithub","owner":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"name":"PyGithub","language":"Python","description":"Description edited by PyGithub","ssh_url":"git@github.com:jacquev6/PyGithub.git","pushed_at":"2012-05-26T10:01:38Z","created_at":"2012-02-25T12:53:47Z","id":3544490,"html_url":"https://github.com/jacquev6/PyGithub","full_name":"jacquev6/PyGithub", "has_projects": false, "allow_forking": true, "allow_squash_merge": true, "allow_merge_commit": true, "allow_rebase_merge": true, "delete_branch_on_merge": true} https PATCH diff --git a/tests/Repository.py b/tests/Repository.py index b34a10411b..bd182bd30c 100644 --- a/tests/Repository.py +++ b/tests/Repository.py @@ -134,6 +134,7 @@ def testEditWithAllArguments(self): has_projects=False, has_wiki=False, has_downloads=True, + allow_forking=True, allow_squash_merge=True, allow_merge_commit=True, allow_rebase_merge=True, @@ -149,6 +150,7 @@ def testEditWithAllArguments(self): self.assertFalse(self.repo.has_projects) self.assertFalse(self.repo.has_wiki) self.assertTrue(self.repo.has_downloads) + self.assertTrue(self.repo.allow_forking) self.assertTrue(self.repo.allow_squash_merge) self.assertTrue(self.repo.allow_merge_commit) self.assertTrue(self.repo.allow_rebase_merge) From 7cf3dfc18e0442ab181ff8fa8d2080670f0ba7ac Mon Sep 17 00:00:00 2001 From: "Mikhail f. Shiryaev" Date: Tue, 31 Jan 2023 00:44:16 +0100 Subject: [PATCH 17/32] Continue the PR #1899 (#2386) * A property to access the `assets` field of release (#1898) ... in order to avoid extra requests. * Remove comment to comply the review * Add tests for GitRelease.assets --------- Co-authored-by: green-green-avk <45503261+green-green-avk@users.noreply.github.com> --- github/GitRelease.py | 13 +++++++++++++ github/GitRelease.pyi | 2 ++ tests/GitRelease.py | 6 ++++++ 3 files changed, 21 insertions(+) diff --git a/github/GitRelease.py b/github/GitRelease.py index 4268fd16dc..56f56ea287 100644 --- a/github/GitRelease.py +++ b/github/GitRelease.py @@ -170,6 +170,14 @@ def zipball_url(self): self._completeIfNotSet(self._zipball_url) return self._zipball_url.value + @property + def assets(self): + """ + :type: list of :class:`github.GitReleaseAsset.GitReleaseAsset` + """ + self._completeIfNotSet(self._assets) + return self._assets.value + def delete_release(self): """ :calls: `DELETE /repos/{owner}/{repo}/releases/{release_id} `_ @@ -333,6 +341,7 @@ def _initAttributes(self): self._published_at = github.GithubObject.NotSet self._tarball_url = github.GithubObject.NotSet self._zipball_url = github.GithubObject.NotSet + self._assets = github.GithubObject.NotSet def _useAttributes(self, attributes): if "id" in attributes: @@ -369,3 +378,7 @@ def _useAttributes(self, attributes): self._tarball_url = self._makeStringAttribute(attributes["tarball_url"]) if "zipball_url" in attributes: self._zipball_url = self._makeStringAttribute(attributes["zipball_url"]) + if "assets" in attributes: + self._assets = self._makeListOfClassesAttribute( + github.GitReleaseAsset.GitReleaseAsset, attributes["assets"] + ) diff --git a/github/GitRelease.pyi b/github/GitRelease.pyi index d6f292cd93..00e633616d 100644 --- a/github/GitRelease.pyi +++ b/github/GitRelease.pyi @@ -11,6 +11,8 @@ class GitRelease(CompletableGithubObject): def _initAttributes(self) -> None: ... def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... @property + def assets(self) -> list[GitReleaseAsset]: ... + @property def author(self) -> NamedUser: ... @property def body(self) -> str: ... diff --git a/tests/GitRelease.py b/tests/GitRelease.py index 7828702220..7a6a5722f0 100644 --- a/tests/GitRelease.py +++ b/tests/GitRelease.py @@ -156,6 +156,12 @@ def testAttributes(self): ), ) self.assertEqual(repr(release), 'GitRelease(title="Test")') + self.assertEqual(len(release.assets), 1) + self.assertEqual( + repr(release.assets[0]), + 'GitReleaseAsset(url="https://api.github.com/repos/' + f'{user}/{repo_name}/releases/assets/{release.raw_data["assets"][0]["id"]}")', + ) def testGetRelease(self): release_by_id = self.release From 5e27c10a3140c3b9bbf71a0b71c96e71e1e3496c Mon Sep 17 00:00:00 2001 From: Denis Blanchette Date: Mon, 6 Feb 2023 04:50:15 -0500 Subject: [PATCH 18/32] Support full GitHub app authentication (#1986) * Support full GitHub app authentication Refactor GithubIntegration class and add test case for app authentication Add permissions and repository properties in InstallationAuthorization Set JWT_EXPIRY=60 by default in GithubIntegration constructor * Modify existing testcases for GithubIntegration as per the framework and add missing tests * Provide installation ID for creating the access token instead of getting the first installation * Add optional permissions support for installation access token * Add lock around app authentication * Keep compatibility for importing GithubIntegration from MainClass * Group app authentication parameters in a class Co-authored-by: Malik Ammar Akbar Co-authored-by: Enrico Minack --- github/AppAuthentication.py | 41 +++ github/AppAuthentication.pyi | 10 + github/Consts.py | 17 + github/GithubIntegration.py | 199 ++++++++++++ github/GithubIntegration.pyi | 34 ++ github/InstallationAuthorization.py | 22 ++ github/InstallationAuthorization.pyi | 4 + github/MainClass.py | 127 +------- github/MainClass.pyi | 21 +- github/Requester.py | 50 ++- github/Requester.pyi | 32 +- github/SelfHostedActionsRunner.pyi | 38 +-- github/__init__.py | 5 +- github/__init__.pyi | 5 +- tests/Authentication.py | 10 + tests/Framework.py | 22 ++ tests/GithubIntegration.py | 296 ++++++++++-------- .../Authentication.testAppAuthentication.txt | 21 ++ .../GithubIntegration.testGetAccessToken.txt | 32 ++ ...on.testGetAccessTokenForNoInstallation.txt | 11 + ...ation.testGetAccessTokenWithExpiredJWT.txt | 11 + ...tion.testGetAccessTokenWithInvalidData.txt | 11 + ...stGetAccessTokenWithInvalidPermissions.txt | 10 + ...thubIntegration.testGetAppInstallation.txt | 11 + ...ntegration.testGetInstallationNotFound.txt | 10 + ...tion.testGetInstallationWithExpiredJWT.txt | 11 + ...GithubIntegration.testGetInstallations.txt | 11 + ...thubIntegration.testGetOrgInstallation.txt | 11 + ...hubIntegration.testGetRepoInstallation.txt | 10 + ...hubIntegration.testGetUserInstallation.txt | 10 + 30 files changed, 808 insertions(+), 295 deletions(-) create mode 100644 github/AppAuthentication.py create mode 100644 github/AppAuthentication.pyi create mode 100644 github/GithubIntegration.py create mode 100644 github/GithubIntegration.pyi create mode 100644 tests/ReplayData/Authentication.testAppAuthentication.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetAccessToken.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetAccessTokenForNoInstallation.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetAccessTokenWithExpiredJWT.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetAccessTokenWithInvalidData.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetAccessTokenWithInvalidPermissions.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetAppInstallation.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetInstallationNotFound.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetInstallationWithExpiredJWT.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetInstallations.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetOrgInstallation.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetRepoInstallation.txt create mode 100644 tests/ReplayData/GithubIntegration.testGetUserInstallation.txt diff --git a/github/AppAuthentication.py b/github/AppAuthentication.py new file mode 100644 index 0000000000..c6527b926d --- /dev/null +++ b/github/AppAuthentication.py @@ -0,0 +1,41 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2023 Denis Blanchette # +# # +# This file is part of PyGithub. # +# http://pygithub.readthedocs.io/ # +# # +# PyGithub is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Lesser General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License # +# along with PyGithub. If not, see . # +# # +################################################################################ + + +class AppAuthentication: + def __init__( + self, + app_id, + private_key, + installation_id, + token_permissions=None, + ): + assert isinstance(app_id, (int, str)), app_id + assert isinstance(private_key, str) + assert isinstance(installation_id, int), installation_id + assert token_permissions is None or isinstance( + token_permissions, dict + ), token_permissions + self.app_id = app_id + self.private_key = private_key + self.installation_id = installation_id + self.token_permissions = token_permissions diff --git a/github/AppAuthentication.pyi b/github/AppAuthentication.pyi new file mode 100644 index 0000000000..040b5f02f1 --- /dev/null +++ b/github/AppAuthentication.pyi @@ -0,0 +1,10 @@ +from typing import Optional, Dict, Union + +class AppAuthentication: + def __init__( + self, + app_id: Union[int, str], + private_key: str, + installation_id: int, + token_permissions: Optional[Dict[str, str]] = ..., + ): ... diff --git a/github/Consts.py b/github/Consts.py index 6f2d9bcb99..b4b7bdd0eb 100644 --- a/github/Consts.py +++ b/github/Consts.py @@ -131,3 +131,20 @@ # https://developer.github.com/changes/2019-12-03-internal-visibility-changes/ repoVisibilityPreview = "application/vnd.github.nebula-preview+json" + +DEFAULT_BASE_URL = "https://api.github.com" +DEFAULT_STATUS_URL = "https://status.github.com" +# As of 2018-05-17, Github imposes a 10s limit for completion of API requests. +# Thus, the timeout should be slightly > 10s to account for network/front-end +# latency. +DEFAULT_TIMEOUT = 15 +DEFAULT_PER_PAGE = 30 + +# JWT expiry in seconds. Could be set for max 600 seconds (10 minutes). +# https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#authenticating-as-a-github-app +DEFAULT_JWT_EXPIRY = 300 +MIN_JWT_EXPIRY = 15 +MAX_JWT_EXPIRY = 600 +# https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#generating-a-json-web-token-jwt +# "The time the JWT was created. To protect against clock drift, we recommend you set this 60 seconds in the past." +DEFAULT_JWT_ISSUED_AT = -60 diff --git a/github/GithubIntegration.py b/github/GithubIntegration.py new file mode 100644 index 0000000000..ecc136c6cb --- /dev/null +++ b/github/GithubIntegration.py @@ -0,0 +1,199 @@ +import time + +import deprecated +import jwt + +from github import Consts +from github.GithubException import GithubException +from github.Installation import Installation +from github.InstallationAuthorization import InstallationAuthorization +from github.PaginatedList import PaginatedList +from github.Requester import Requester + + +class GithubIntegration: + """ + Main class to obtain tokens for a GitHub integration. + """ + + def __init__( + self, + integration_id, + private_key, + base_url=Consts.DEFAULT_BASE_URL, + jwt_expiry=Consts.DEFAULT_JWT_EXPIRY, + jwt_issued_at=Consts.DEFAULT_JWT_ISSUED_AT, + ): + """ + :param integration_id: int + :param private_key: string + :param base_url: string + :param jwt_expiry: int. Expiry of the JWT used to get the information about this integration. + The default expiration is in 5 minutes and is capped at 10 minutes according to GitHub documentation + https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#generating-a-json-web-token-jwt + :param jwt_issued_at: int. Number of seconds, relative to now, to set for the "iat" (issued at) parameter. + The default value is -60 to protect against clock drift + """ + assert isinstance(integration_id, (int, str)), integration_id + assert isinstance(private_key, str), "supplied private key should be a string" + assert isinstance(base_url, str), base_url + assert isinstance(jwt_expiry, int), jwt_expiry + assert Consts.MIN_JWT_EXPIRY <= jwt_expiry <= Consts.MAX_JWT_EXPIRY, jwt_expiry + assert isinstance(jwt_issued_at, int) + + self.base_url = base_url + self.integration_id = integration_id + self.private_key = private_key + self.jwt_expiry = jwt_expiry + self.jwt_issued_at = jwt_issued_at + self.__requester = Requester( + login_or_token=None, + password=None, + jwt=self.create_jwt(), + app_auth=None, + base_url=self.base_url, + timeout=Consts.DEFAULT_TIMEOUT, + user_agent="PyGithub/Python", + per_page=Consts.DEFAULT_PER_PAGE, + verify=True, + retry=None, + pool_size=None, + ) + + def _get_headers(self): + """ + Get headers for the requests. + + :return: dict + """ + return { + "Authorization": f"Bearer {self.create_jwt()}", + "Accept": Consts.mediaTypeIntegrationPreview, + "User-Agent": "PyGithub/Python", + } + + def _get_installed_app(self, url): + """ + Get installation for the given URL. + + :param url: str + :rtype: :class:`github.Installation.Installation` + """ + headers, response = self.__requester.requestJsonAndCheck( + "GET", url, headers=self._get_headers() + ) + + return Installation( + requester=self.__requester, + headers=headers, + attributes=response, + completed=True, + ) + + def create_jwt(self): + """ + Create a signed JWT + https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#authenticating-as-a-github-app + + :return string: + """ + now = int(time.time()) + payload = { + "iat": now + self.jwt_issued_at, + "exp": now + self.jwt_expiry, + "iss": self.integration_id, + } + encrypted = jwt.encode(payload, key=self.private_key, algorithm="RS256") + + if isinstance(encrypted, bytes): + encrypted = encrypted.decode("utf-8") + + return encrypted + + def get_access_token(self, installation_id, permissions=None): + """ + :calls: `POST /app/installations/{installation_id}/access_tokens ` + :param installation_id: int + :param permissions: dict + :return: :class:`github.InstallationAuthorization.InstallationAuthorization` + """ + if permissions is None: + permissions = {} + + if not isinstance(permissions, dict): + raise GithubException( + status=400, data={"message": "Invalid permissions"}, headers=None + ) + + body = {"permissions": permissions} + headers, response = self.__requester.requestJsonAndCheck( + "POST", + f"/app/installations/{installation_id}/access_tokens", + input=body, + ) + + return InstallationAuthorization( + requester=self.__requester, + headers=headers, + attributes=response, + completed=True, + ) + + @deprecated.deprecated("Use get_repo_installation") + def get_installation(self, owner, repo): + """ + Deprecated by get_repo_installation + + :calls: `GET /repos/{owner}/{repo}/installation ` + :param owner: str + :param repo: str + :rtype: :class:`github.Installation.Installation` + """ + return self._get_installed_app(url=f"/repos/{owner}/{repo}/installation") + + def get_installations(self): + """ + :calls: GET /app/installations + :rtype: :class:`github.PaginatedList.PaginatedList[github.Installation.Installation]` + """ + return PaginatedList( + contentClass=Installation, + requester=self.__requester, + firstUrl="/app/installations", + firstParams=None, + headers=self._get_headers(), + list_item="installations", + ) + + def get_org_installation(self, org): + """ + :calls: `GET /orgs/{org}/installation ` + :param org: str + :rtype: :class:`github.Installation.Installation` + """ + return self._get_installed_app(url=f"/orgs/{org}/installation") + + def get_repo_installation(self, owner, repo): + """ + :calls: `GET /repos/{owner}/{repo}/installation ` + :param owner: str + :param repo: str + :rtype: :class:`github.Installation.Installation` + """ + return self._get_installed_app(url=f"/repos/{owner}/{repo}/installation") + + def get_user_installation(self, username): + """ + :calls: `GET /users/{username}/installation ` + :param username: str + :rtype: :class:`github.Installation.Installation` + """ + return self._get_installed_app(url=f"/users/{username}/installation") + + def get_app_installation(self, installation_id): + """ + :calls: `GET /app/installations/{installation_id} ` + :param installation_id: int + :rtype: :class:`github.Installation.Installation` + """ + return self._get_installed_app(url=f"/app/installations/{installation_id}") diff --git a/github/GithubIntegration.pyi b/github/GithubIntegration.pyi new file mode 100644 index 0000000000..52a5c0198d --- /dev/null +++ b/github/GithubIntegration.pyi @@ -0,0 +1,34 @@ +from typing import Union, Optional, Dict + +from github.Installation import Installation +from github.InstallationAuthorization import InstallationAuthorization +from github.PaginatedList import PaginatedList +from github.Requester import Requester + +class GithubIntegration: + integration_id: Union[int, str] = ... + private_key: str = ... + base_url: str = ... + jwt_expiry: int = ... + jwt_issued_at: int = ... + __requester: Requester = ... + def __init__( + self, + integration_id: Union[int, str], + private_key: str, + base_url: str = ..., + jwt_expiry: int = ..., + jwt_issued_at: int = ..., + ) -> None: ... + def _get_installed_app(self, url: str) -> Installation: ... + def _get_headers(self) -> Dict[str, str]: ... + def create_jwt(self, expiration: int = ...) -> str: ... + def get_access_token( + self, installation_id: int, permissions: Optional[Dict[str, str]] = ... + ) -> InstallationAuthorization: ... + def get_app_installation(self, installation_id: int) -> Installation: ... + def get_installation(self, owner: str, repo: str) -> Installation: ... + def get_installations(self) -> PaginatedList[Installation]: ... + def get_org_installation(self, org: str) -> Installation: ... + def get_repo_installation(self, owner: str, repo: str) -> Installation: ... + def get_user_installation(self, username: str) -> Installation: ... diff --git a/github/InstallationAuthorization.py b/github/InstallationAuthorization.py index 06c695f9ae..036a3eef4d 100644 --- a/github/InstallationAuthorization.py +++ b/github/InstallationAuthorization.py @@ -57,10 +57,26 @@ def on_behalf_of(self): """ return self._on_behalf_of.value + @property + def permissions(self): + """ + :type: dict + """ + return self._permissions.value + + @property + def repository_selection(self): + """ + :type: string + """ + return self._repository_selection.value + def _initAttributes(self): self._token = github.GithubObject.NotSet self._expires_at = github.GithubObject.NotSet self._on_behalf_of = github.GithubObject.NotSet + self._permissions = github.GithubObject.NotSet + self._repository_selection = github.GithubObject.NotSet def _useAttributes(self, attributes): if "token" in attributes: # pragma no branch @@ -71,3 +87,9 @@ def _useAttributes(self, attributes): self._on_behalf_of = self._makeClassAttribute( github.NamedUser.NamedUser, attributes["on_behalf_of"] ) + if "permissions" in attributes: # pragma no branch + self._permissions = self._makeDictAttribute(attributes["permissions"]) + if "repository_selection" in attributes: # pragma no branch + self._repository_selection = self._makeStringAttribute( + attributes["repository_selection"] + ) diff --git a/github/InstallationAuthorization.pyi b/github/InstallationAuthorization.pyi index 545ff16067..8ef8e38fc5 100644 --- a/github/InstallationAuthorization.pyi +++ b/github/InstallationAuthorization.pyi @@ -14,3 +14,7 @@ class InstallationAuthorization(NonCompletableGithubObject): def on_behalf_of(self) -> NamedUser: ... @property def token(self) -> str: ... + @property + def permissions(self) -> dict: ... + @property + def repository_selection(self) -> str: ... diff --git a/github/MainClass.py b/github/MainClass.py index 5b626ad265..5b438d6ce4 100644 --- a/github/MainClass.py +++ b/github/MainClass.py @@ -49,10 +49,7 @@ import datetime import pickle -import time -import jwt -import requests import urllib3 import github.ApplicationOAuth @@ -68,24 +65,13 @@ AuthenticatedUser, Consts, GithubApp, - GithubException, GitignoreTemplate, HookDescription, - Installation, - InstallationAuthorization, RateLimit, Repository, ) from .Requester import Requester -DEFAULT_BASE_URL = "https://api.github.com" -DEFAULT_STATUS_URL = "https://status.github.com" -# As of 2018-05-17, Github imposes a 10s limit for completion of API requests. -# Thus, the timeout should be slightly > 10s to account for network/front-end -# latency. -DEFAULT_TIMEOUT = 15 -DEFAULT_PER_PAGE = 30 - class Github: """ @@ -97,10 +83,11 @@ def __init__( login_or_token=None, password=None, jwt=None, - base_url=DEFAULT_BASE_URL, - timeout=DEFAULT_TIMEOUT, + app_auth=None, + base_url=Consts.DEFAULT_BASE_URL, + timeout=Consts.DEFAULT_TIMEOUT, user_agent="PyGithub/Python", - per_page=DEFAULT_PER_PAGE, + per_page=Consts.DEFAULT_PER_PAGE, verify=True, retry=None, pool_size=None, @@ -108,6 +95,8 @@ def __init__( """ :param login_or_token: string :param password: string + :param jwt: string + :param app_auth: github.AppAuthentication :param base_url: string :param timeout: integer :param user_agent: string @@ -125,14 +114,16 @@ def __init__( assert user_agent is None or isinstance(user_agent, str), user_agent assert ( retry is None - or isinstance(retry, (int)) - or isinstance(retry, (urllib3.util.Retry)) - ) - assert pool_size is None or isinstance(pool_size, (int)), pool_size + or isinstance(retry, int) + or isinstance(retry, urllib3.util.Retry) + ), retry + assert pool_size is None or isinstance(pool_size, int), pool_size + self.__requester = Requester( login_or_token, password, jwt, + app_auth, base_url, timeout, user_agent, @@ -786,95 +777,5 @@ def get_app(self, slug=github.GithubObject.NotSet): return GithubApp.GithubApp(self.__requester, headers, data, completed=True) -class GithubIntegration: - """ - Main class to obtain tokens for a GitHub integration. - """ - - def __init__(self, integration_id, private_key, base_url=DEFAULT_BASE_URL): - """ - :param base_url: string - :param integration_id: int - :param private_key: string - """ - self.base_url = base_url - self.integration_id = integration_id - self.private_key = private_key - assert isinstance(base_url, str), base_url - - def create_jwt(self, expiration=60): - """ - Creates a signed JWT, valid for 60 seconds by default. - The expiration can be extended beyond this, to a maximum of 600 seconds. - - :param expiration: int - :return string: - """ - now = int(time.time()) - payload = {"iat": now, "exp": now + expiration, "iss": self.integration_id} - encrypted = jwt.encode(payload, key=self.private_key, algorithm="RS256") - - if isinstance(encrypted, bytes): - encrypted = encrypted.decode("utf-8") - - return encrypted - - def get_access_token(self, installation_id, user_id=None): - """ - Get an access token for the given installation id. - POSTs https://api.github.com/app/installations//access_tokens - :param user_id: int - :param installation_id: int - :return: :class:`github.InstallationAuthorization.InstallationAuthorization` - """ - body = {} - if user_id: - body = {"user_id": user_id} - response = requests.post( - f"{self.base_url}/app/installations/{installation_id}/access_tokens", - headers={ - "Authorization": f"Bearer {self.create_jwt()}", - "Accept": Consts.mediaTypeIntegrationPreview, - "User-Agent": "PyGithub/Python", - }, - json=body, - ) - - if response.status_code == 201: - return InstallationAuthorization.InstallationAuthorization( - requester=None, # not required, this is a NonCompletableGithubObject - headers={}, # not required, this is a NonCompletableGithubObject - attributes=response.json(), - completed=True, - ) - elif response.status_code == 403: - raise GithubException.BadCredentialsException( - status=response.status_code, data=response.text - ) - elif response.status_code == 404: - raise GithubException.UnknownObjectException( - status=response.status_code, data=response.text - ) - raise GithubException.GithubException( - status=response.status_code, data=response.text - ) - - def get_installation(self, owner, repo): - """ - :calls: `GET /repos/{owner}/{repo}/installation `_ - :param owner: str - :param repo: str - :rtype: :class:`github.Installation.Installation` - """ - headers = { - "Authorization": f"Bearer {self.create_jwt()}", - "Accept": Consts.mediaTypeIntegrationPreview, - "User-Agent": "PyGithub/Python", - } - - response = requests.get( - f"{self.base_url}/repos/{owner}/{repo}/installation", - headers=headers, - ) - response_dict = response.json() - return Installation.Installation(None, headers, response_dict, True) +# Retrocompatibility +GithubIntegration = github.GithubIntegration diff --git a/github/MainClass.pyi b/github/MainClass.pyi index 62b84e238a..63ccf786a9 100644 --- a/github/MainClass.pyi +++ b/github/MainClass.pyi @@ -2,6 +2,7 @@ from datetime import datetime from io import BytesIO from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar, Union, overload +from github.AppAuthentication import AppAuthentication from github.AuthenticatedUser import AuthenticatedUser from github.Commit import Commit from github.ContentFile import ContentFile @@ -10,8 +11,6 @@ from github.Gist import Gist from github.GithubObject import GithubObject, _NotSetType from github.GitignoreTemplate import GitignoreTemplate from github.HookDescription import HookDescription -from github.Installation import Installation -from github.InstallationAuthorization import InstallationAuthorization from github.Issue import Issue from github.License import License from github.NamedUser import NamedUser @@ -32,10 +31,9 @@ class Github: login_or_token: Optional[str] = ..., password: Optional[str] = ..., jwt: Optional[str] = ..., + app_auth: Optional[AppAuthentication] = ..., base_url: str = ..., timeout: int = ..., - client_id: Optional[str] = ..., - client_secret: Optional[str] = ..., user_agent: str = ..., per_page: int = ..., verify: bool = ..., @@ -67,7 +65,6 @@ class Github: def get_gitignore_templates(self) -> List[str]: ... def get_hook(self, name: str) -> HookDescription: ... def get_hooks(self) -> List[HookDescription]: ... - def get_installation(self, id: int) -> Installation: ... def get_license(self, key: Union[str, _NotSetType] = ...) -> License: ... def get_licenses(self) -> PaginatedList[License]: ... def get_organization(self, login: str) -> Organization: ... @@ -87,7 +84,9 @@ class Github: @overload def get_user(self, login: _NotSetType = ...) -> AuthenticatedUser: ... @overload - def get_user(self, login: str) -> NamedUser: ... + def get_user( + self, login: Union[str, _NotSetType] = ... + ) -> Union[NamedUser, AuthenticatedUser]: ... def get_user_by_id(self, user_id: int) -> NamedUser: ... def get_users( self, since: Union[int, _NotSetType] = ... @@ -139,13 +138,3 @@ class Github: order: Union[str, _NotSetType] = ..., **qualifiers: Any ) -> PaginatedList[NamedUser]: ... - -class GithubIntegration: - def __init__( - self, integration_id: Union[int, str], private_key: str, base_url: str = ... - ) -> None: ... - def create_jwt(self, expiration: int = ...) -> str: ... - def get_access_token( - self, installation_id: int, user_id: Optional[int] = ... - ) -> InstallationAuthorization: ... - def get_installation(self, owner: str, repo: str) -> Installation: ... diff --git a/github/Requester.py b/github/Requester.py index 8c6e13cea9..253fab620e 100644 --- a/github/Requester.py +++ b/github/Requester.py @@ -51,6 +51,7 @@ ################################################################################ import base64 +import datetime import json import logging import mimetypes @@ -59,10 +60,14 @@ import time import urllib from io import IOBase +from multiprocessing import RLock import requests -from . import Consts, GithubException +from . import Consts, GithubException, GithubIntegration + +# For App authentication, time remaining before token expiration to request a new one +ACCESS_TOKEN_REFRESH_THRESHOLD_SECONDS = 20 class RequestsResponse: @@ -294,6 +299,7 @@ def __init__( login_or_token, password, jwt, + app_auth, base_url, timeout, user_agent, @@ -304,6 +310,11 @@ def __init__( ): self._initializeDebugFeature() + self.__installation_authorization = None + self.__app_auth = app_auth + + self.__auth_lock = RLock() + if password is not None: login = login_or_token b64 = ( @@ -317,6 +328,8 @@ def __init__( self.__authorizationHeader = f"token {token}" elif jwt is not None: self.__authorizationHeader = f"Bearer {jwt}" + elif self.__app_auth is not None: + self._refresh_token() else: self.__authorizationHeader = None @@ -349,6 +362,40 @@ def __init__( self.__userAgent = user_agent self.__verify = verify + def _must_refresh_token(self) -> bool: + """Check if it is time to refresh the API token gotten from the GitHub app installation""" + if not self.__installation_authorization: + return False + return ( + self.__installation_authorization.expires_at + < datetime.datetime.utcnow() + + datetime.timedelta(seconds=ACCESS_TOKEN_REFRESH_THRESHOLD_SECONDS) + ) + + def _get_installation_authorization(self): + assert self.__app_auth is not None + integration = GithubIntegration.GithubIntegration( + self.__app_auth.app_id, self.__app_auth.private_key + ) + return integration.get_access_token( + self.__app_auth.installation_id, + permissions=self.__app_auth.token_permissions, + ) + + def _refresh_token_if_needed(self) -> None: + """Get a new access token from the GitHub app installation if the one we have is about to expire""" + if not self.__installation_authorization: + return + with self.__auth_lock: + if self._must_refresh_token(): + logging.debug("Refreshing access token") + self._refresh_token() + + def _refresh_token(self) -> None: + """In the context of a GitHub app, refresh the access token""" + self.__installation_authorization = self._get_installation_authorization() + self.__authorizationHeader = f"token {self.__installation_authorization.token}" + def requestJsonAndCheck(self, verb, url, parameters=None, headers=None, input=None): return self.__check( *self.requestJson( @@ -578,6 +625,7 @@ def __requestRaw(self, cnx, verb, url, requestHeaders, input): return status, responseHeaders, output def __authenticate(self, url, requestHeaders, parameters): + self._refresh_token_if_needed() if self.__authorizationHeader is not None: requestHeaders["Authorization"] = self.__authorizationHeader diff --git a/github/Requester.pyi b/github/Requester.pyi index 381fae929b..be3c6aa00b 100644 --- a/github/Requester.pyi +++ b/github/Requester.pyi @@ -4,7 +4,9 @@ from typing import Any, Callable, Dict, Iterator, Optional, Tuple, Union from requests.models import Response +from github.AppAuthentication import AppAuthentication from github.GithubObject import GithubObject +from github.InstallationAuthorization import InstallationAuthorization from urllib3.util import Retry @@ -47,6 +49,8 @@ class HTTPSRequestsConnectionClass: ) -> None: ... class Requester: + __installation_authorization: Optional[InstallationAuthorization] = ... + __app_auth: Optional[AppAuthentication] = ... def DEBUG_ON_RESPONSE( self, statusCode: int, responseHeader: Dict[str, str], data: str ) -> None: ... @@ -54,7 +58,7 @@ class Requester: def __check( self, status: int, - responseHeader: Dict[str, Any], + responseHeaders: Dict[str, Any], output: str, ) -> Tuple[Dict[str, Any], Dict[str, Any]]: ... def __addParametersToUrl( @@ -65,7 +69,7 @@ class Requester: def __authenticate( self, url: str, - responseHeader: Dict[str, Any], + requestHeaders: Dict[str, Any], parameters: Dict[str, Any], ) -> None: ... def __customConnection( @@ -88,37 +92,37 @@ class Requester: requestHeaders: Dict[str, str], input: Optional[str], status: Optional[int], - responseHeader: Dict[str, Any], + responseHeaders: Dict[str, Any], output: Optional[str], ) -> None: ... def __makeAbsoluteUrl(self, url: str) -> str: ... def __structuredFromJson(self, data: str) -> Optional[Dict[str, Any]]: ... def __requestEncode( self, + cnx: Union[HTTPRequestsConnectionClass, HTTPSRequestsConnectionClass], verb: str, url: str, - parameters: Dict[str, str] = ..., - headers: Dict[str, str] = ..., - input: Optional[str] = ..., - encode: Callable[[str], str] = ..., + parameters: Dict[str, str], + requestHeaders: Dict[str, str], + input: Optional[str], + encode: Callable[[str], str], ) -> Tuple[int, Dict[str, Any], str]: ... def __requestRaw( self, + cnx: Union[HTTPRequestsConnectionClass, HTTPSRequestsConnectionClass], verb: str, url: str, - parameters: Dict[str, str] = ..., - headers: Dict[str, str] = ..., - input: Optional[str] = ..., + requestHeaders: Dict[str, str], + input: Optional[str], ) -> Tuple[int, Dict[str, Any], str]: ... def __init__( self, login_or_token: Optional[str], password: Optional[str], jwt: Optional[str], + app_auth: Optional[AppAuthentication], base_url: str, timeout: int, - client_id: Optional[str], - client_secret: Optional[str], user_agent: str, per_page: int, verify: bool, @@ -127,6 +131,10 @@ class Requester: ) -> None: ... def _initializeDebugFeature(self) -> None: ... def check_me(self, obj: GithubObject) -> None: ... + def _must_refresh_token(self) -> bool: ... + def _get_installation_authorization(self) -> InstallationAuthorization: ... + def _refresh_token_if_needed(self) -> None: ... + def _refresh_token(self) -> None: ... @classmethod def injectConnectionClasses( cls, httpConnectionClass: Callable, httpsConnectionClass: Callable diff --git a/github/SelfHostedActionsRunner.pyi b/github/SelfHostedActionsRunner.pyi index deb486f5a1..0ab60ba01a 100644 --- a/github/SelfHostedActionsRunner.pyi +++ b/github/SelfHostedActionsRunner.pyi @@ -1,19 +1,19 @@ -from typing import Any, Dict, List, Union - -from github.GithubObject import NonCompletableGithubObject - -class SelfHostedActionsRunner(NonCompletableGithubObject): - def __repr__(self) -> str: ... - def _initAttributes(self) -> None: ... - def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... - @property - def id(self) -> int: ... - @property - def name(self) -> str: ... - @property - def os(self) -> str: ... - @property - def status(self) -> str: ... - @property - def busy(self) -> bool: ... - def labels(self) -> List[Dict[str, Union[str, int]]]: ... +from typing import Any, Dict, List, Union + +from github.GithubObject import NonCompletableGithubObject + +class SelfHostedActionsRunner(NonCompletableGithubObject): + def __repr__(self) -> str: ... + def _initAttributes(self) -> None: ... + def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... + @property + def id(self) -> int: ... + @property + def name(self) -> str: ... + @property + def os(self) -> str: ... + @property + def status(self) -> str: ... + @property + def busy(self) -> bool: ... + def labels(self) -> List[Dict[str, Union[str, int]]]: ... diff --git a/github/__init__.py b/github/__init__.py index c978fbe999..0e3227de7e 100644 --- a/github/__init__.py +++ b/github/__init__.py @@ -35,6 +35,7 @@ All classes inherit from :class:`github.GithubObject.GithubObject`. """ __all__ = [ + "AppAuthentication", "BadAttributeException", "BadCredentialsException", "BadUserAgentException", @@ -53,7 +54,9 @@ import logging -from github.MainClass import Github, GithubIntegration +from github.AppAuthentication import AppAuthentication +from github.GithubIntegration import GithubIntegration +from github.MainClass import Github from .GithubException import ( BadAttributeException, diff --git a/github/__init__.pyi b/github/__init__.pyi index a3f3a5ff90..96009018a4 100644 --- a/github/__init__.pyi +++ b/github/__init__.pyi @@ -1,11 +1,12 @@ +from github.AppAuthentication import AppAuthentication as AppAuthentication +from github.GithubIntegration import GithubIntegration as GithubIntegration from github.MainClass import Github as Github -from github.MainClass import GithubIntegration as GithubIntegration from .GithubException import BadAttributeException as BadAttributeException from .GithubException import BadCredentialsException as BadCredentialsException from .GithubException import BadUserAgentException as BadUserAgentException from .GithubException import GithubException as GithubException -from .GithubException import IncompletableObject as IncompleteableObject +from .GithubException import IncompletableObject as IncompletableObject from .GithubException import RateLimitExceededException as RateLimitExceededException from .GithubException import TwoFactorException as TwoFactorException from .GithubException import UnknownObjectException as UnknownObjectException diff --git a/tests/Authentication.py b/tests/Authentication.py index cc65af303a..c66dd73137 100644 --- a/tests/Authentication.py +++ b/tests/Authentication.py @@ -52,6 +52,16 @@ def testUserAgent(self): g = github.Github(user_agent="PyGithubTester") self.assertEqual(g.get_user("jacquev6").name, "Vincent Jacques") + def testAppAuthentication(self): + g = github.Github( + app_auth=github.AppAuthentication( + app_id=self.app_id, + private_key=self.app_private_key, + installation_id=29782936, + ), + ) + self.assertEqual(g.get_user("ammarmallik").name, "Ammar Akbar") + def testAuthorizationHeaderWithLogin(self): # See special case in Framework.fixAuthorizationHeader g = github.Github("fake_login", "fake_password") diff --git a/tests/Framework.py b/tests/Framework.py index 2b9215ac69..24ab745a2c 100644 --- a/tests/Framework.py +++ b/tests/Framework.py @@ -46,6 +46,24 @@ import github +APP_PRIVATE_KEY = """ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQC+5ePolLv6VcWLp2f17g6r6vHl+eoLuodOOfUl8JK+MVmvXbPa +xDy0SS0pQhwTOMtB0VdSt++elklDCadeokhEoGDQp411o+kiOhzLxfakp/kewf4U +HJnu4M/A2nHmxXVe2lzYnZvZHX5BM4SJo5PGdr0Ue2JtSXoAtYr6qE9maQIDAQAB +AoGAFhOJ7sy8jG+837Clcihso+8QuHLVYTPaD+7d7dxLbBlS8NfaQ9Nr3cGUqm/N +xV9NCjiGa7d/y4w/vrPwGh6UUsA+CvndwDgBd0S3WgIdWvAvHM8wKgNh/GBLLzhT +Bg9BouRUzcT1MjAnkGkWqqCAgN7WrCSUMLt57TNleNWfX90CQQDjvVKTT3pOiavD +3YcLxwkyeGd0VMvKiS4nV0XXJ97cGXs2GpOGXldstDTnF5AnB6PbukdFLHpsx4sW +Hft3LRWnAkEA1pY15ke08wX6DZVXy7zuQ2izTrWSGySn7B41pn55dlKpttjHeutA +3BEQKTFvMhBCphr8qST7Wf1SR9FgO0tFbwJAEhHji2yy96hUyKW7IWQZhrem/cP8 +p4Va9CQolnnDZRNgg1p4eiDiLu3dhLiJ547joXuWTBbLX/Y1Qvv+B+a74QJBAMCW +O3WbMZlS6eK6//rIa4ZwN00SxDg8I8FUM45jwBsjgVGrKQz2ilV3sutlhIiH82kk +m1Iq8LMJGYl/LkDJA10CQBV1C+Xu3ukknr7C4A/4lDCa6Xb27cr1HanY7i89A+Ab +eatdM6f/XVqWp8uPT9RggUV9TjppJobYGT2WrWJMkYw= +-----END RSA PRIVATE KEY----- +""" + def readLine(file_): line = file_.readline() @@ -268,6 +286,8 @@ def setUp(self): self.password = GithubCredentials.password self.oauth_token = GithubCredentials.oauth_token self.jwt = GithubCredentials.jwt + self.app_id = GithubCredentials.app_id + self.app_private_key = GithubCredentials.app_private_key else: github.Requester.Requester.injectConnectionClasses( lambda ignored, *args, **kwds: ReplayingHttpConnection( @@ -281,6 +301,8 @@ def setUp(self): self.password = "password" self.oauth_token = "oauth_token" self.jwt = "jwt" + self.app_id = 123456 + self.app_private_key = APP_PRIVATE_KEY httpretty.enable(allow_net_connect=False) diff --git a/tests/GithubIntegration.py b/tests/GithubIntegration.py index 272f50db45..37b1434480 100644 --- a/tests/GithubIntegration.py +++ b/tests/GithubIntegration.py @@ -1,15 +1,15 @@ -import datetime -import json import sys import time # NOQA -import unittest import jwt import requests # NOQA -from github.GithubObject import GithubObject +import github -private_key = """ +from . import Framework + +APP_ID = 243473 +PRIVATE_KEY = """ -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQC+5ePolLv6VcWLp2f17g6r6vHl+eoLuodOOfUl8JK+MVmvXbPa xDy0SS0pQhwTOMtB0VdSt++elklDCadeokhEoGDQp411o+kiOhzLxfakp/kewf4U @@ -26,8 +26,7 @@ eatdM6f/XVqWp8uPT9RggUV9TjppJobYGT2WrWJMkYw= -----END RSA PRIVATE KEY----- """ - -public_key = """ +PUBLIC_KEY = """ -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+5ePolLv6VcWLp2f17g6r6vHl +eoLuodOOfUl8JK+MVmvXbPaxDy0SS0pQhwTOMtB0VdSt++elklDCadeokhEoGDQ @@ -37,154 +36,189 @@ """ -class GithubIntegration(unittest.TestCase): +class GithubIntegration(Framework.BasicTestCase): def setUp(self): - # This flag ask requester to do some checking, - # for debug and test purpose. But - # `InstallationAuthorization.InstallationAuthorization` is a - # `NonCompletableGithubObject`, it does not have requester. - # So the check is not needed. - # see `GithubIntegration.get_access_token` - self.origin_check_after_init_flag = GithubObject.CHECK_AFTER_INIT_FLAG - GithubObject.setCheckAfterInitFlag(False) + super().setUp() + self.org_installation_id = 30614487 + self.repo_installation_id = 30614431 + self.user_installation_id = 30614431 + def testCreateJWT(self): self.origin_time = sys.modules["time"].time sys.modules["time"].time = lambda: 1550055331.7435968 - - class Mock: - def __init__(self): - self.args = tuple() - self.kwargs = dict() - - @property - def status_code(self): - return 201 - - def json(self): - return json.loads(self.text) - - @property - def text(self): - return ( - '{"token": "v1.ce63424bc55028318325caac4f4c3a5378ca0038",' - '"expires_at": "2019-02-13T11:10:38Z"}' - ) - - def __call__(self, *args, **kwargs): - self.args = args - self.kwargs = kwargs - return self - - self.origin_request_post = sys.modules["requests"].post - self.mock = Mock() - sys.modules["requests"].post = self.mock - - class GetMock: - def __init__(self): - self.args = tuple() - self.kwargs = dict() - self.calls = [] - - @property - def status_code(self): - return 201 - - def json(self): - return json.loads(self.text) - - @property - def text(self): - return ( - '{"id":111111,"account":{"login":"foo","id":11111111,' - '"node_id":"foobar",' - '"avatar_url":"https://avatars3.githubusercontent.com/u/11111111?v=4",' - '"gravatar_id":"","url":"https://api.github.com/users/foo",' - '"html_url":"https://github.com/foo",' - '"followers_url":"https://api.github.com/users/foo/followers",' - '"following_url":"https://api.github.com/users/foo/following{/other_user}",' - '"gists_url":"https://api.github.com/users/foo/gists{/gist_id}",' - '"starred_url":"https://api.github.com/users/foo/starred{/owner}{/repo}",' - '"subscriptions_url":"https://api.github.com/users/foo/subscriptions",' - '"organizations_url":"https://api.github.com/users/foo/orgs",' - '"repos_url":"https://api.github.com/users/foo/repos",' - '"events_url":"https://api.github.com/users/foo/events{/privacy}",' - '"received_events_url":"https://api.github.com/users/foo/received_events",' - '"type":"Organization","site_admin":false},"repository_selection":"all",' - '"access_tokens_url":"https://api.github.com/app/installations/111111/access_tokens",' - '"repositories_url":"https://api.github.com/installation/repositories",' - '"html_url":"https://github.com/organizations/foo/settings/installations/111111",' - '"app_id":11111,"target_id":11111111,"target_type":"Organization",' - '"permissions":{"issues":"write","pull_requests":"write","statuses":"write","contents":"read",' - '"metadata":"read"},"events":["pull_request","release"],"created_at":"2019-04-17T16:10:37.000Z",' - '"updated_at":"2019-05-03T06:27:48.000Z","single_file_name":null}' - ) - - def __call__(self, *args, **kwargs): - self.calls.append((args, kwargs)) - self.args = args - self.kwargs = kwargs - return self - - self.origin_request_get = sys.modules["requests"].get - self.get_mock = GetMock() - sys.modules["requests"].get = self.get_mock - - def testCreateJWT(self): - from github import GithubIntegration - - integration = GithubIntegration(25216, private_key) - token = integration.create_jwt() + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + token = github_integration.create_jwt() payload = jwt.decode( token, - key=public_key, + key=PUBLIC_KEY, algorithms=["RS256"], options={"verify_exp": False}, ) self.assertDictEqual( - payload, {"iat": 1550055331, "exp": 1550055391, "iss": 25216} + payload, {"iat": 1550055271, "exp": 1550055631, "iss": APP_ID} ) + sys.modules["time"].time = self.origin_time + + def testGetInstallations(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + installations = github_integration.get_installations() + + self.assertEqual(len(list(installations)), 2) + self.assertEqual(installations[0].id, self.org_installation_id) + self.assertEqual(installations[1].id, self.repo_installation_id) def testGetAccessToken(self): - from github import GithubIntegration + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) - integration = GithubIntegration(25216, private_key) - auth_obj = integration.get_access_token(664281) - self.assertEqual( - self.mock.args[0], - "https://api.github.com/app/installations/664281/access_tokens", + # Get repo installation access token + repo_installation_authorization = github_integration.get_access_token( + self.repo_installation_id ) - self.assertEqual(auth_obj.token, "v1.ce63424bc55028318325caac4f4c3a5378ca0038") self.assertEqual( - auth_obj.expires_at, datetime.datetime(2019, 2, 13, 11, 10, 38) + repo_installation_authorization.token, + "ghs_1llwuELtXN5HDOB99XhpcTXdJxbOuF0ZlSmj", + ) + self.assertDictEqual( + repo_installation_authorization.permissions, + {"issues": "read", "metadata": "read"}, ) self.assertEqual( - repr(auth_obj), "InstallationAuthorization(expires_at=2019-02-13 11:10:38)" + repo_installation_authorization.repository_selection, "selected" ) - def test_get_installation(self): - from github import GithubIntegration + # Get org installation access token + org_installation_authorization = github_integration.get_access_token( + self.org_installation_id + ) + self.assertEqual( + org_installation_authorization.token, + "ghs_V0xygF8yACXSDz5FM65QWV1BT2vtxw0cbgPw", + ) + org_permissions = { + "administration": "write", + "issues": "write", + "metadata": "read", + "organization_administration": "read", + } + self.assertDictEqual( + org_installation_authorization.permissions, org_permissions + ) + self.assertEqual( + org_installation_authorization.repository_selection, "selected" + ) - integr = GithubIntegration("11111", private_key) - inst = integr.get_installation("foo", "bar") + # Get user installation access token + user_installation_authorization = github_integration.get_access_token( + self.user_installation_id + ) self.assertEqual( - self.get_mock.calls[0][0], - ("https://api.github.com/repos/foo/bar/installation",), + user_installation_authorization.token, + "ghs_1llwuELtXN5HDOB99XhpcTXdJxbOuF0ZlSmj", + ) + self.assertDictEqual( + user_installation_authorization.permissions, + {"issues": "read", "metadata": "read"}, + ) + self.assertEqual( + user_installation_authorization.repository_selection, "selected" + ) + + def testGetUserInstallation(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY ) - self.assertEqual(inst.id, 111111) + installation = github_integration.get_user_installation(username="ammarmallik") - def test_get_installation_custom_base_url(self): - from github import GithubIntegration + self.assertEqual(installation.id, self.user_installation_id) - integr = GithubIntegration("11111", private_key, base_url="https://corp.com/v3") - inst = integr.get_installation("foo", "bar") - self.assertEqual( - self.get_mock.calls[0][0], - ("https://corp.com/v3/repos/foo/bar/installation",), + def testGetOrgInstallation(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY ) - self.assertEqual(inst.id, 111111) + installation = github_integration.get_org_installation(org="GithubApp-Test-Org") - def tearDown(self): - GithubObject.setCheckAfterInitFlag(self.origin_check_after_init_flag) - sys.modules["time"].time = self.origin_time - sys.modules["requests"].post = self.origin_request_post - sys.modules["requests"].get = self.origin_request_get + self.assertEqual(installation.id, self.org_installation_id) + + def testGetRepoInstallation(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + installation = github_integration.get_repo_installation( + owner="ammarmallik", repo="test-runner" + ) + + self.assertEqual(installation.id, self.repo_installation_id) + + def testGetAppInstallation(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + installation = github_integration.get_app_installation( + installation_id=self.org_installation_id + ) + + self.assertEqual(installation.id, self.org_installation_id) + + def testGetInstallationNotFound(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + with self.assertRaises(github.UnknownObjectException) as raisedexp: + github_integration.get_org_installation(org="GithubApp-Test-Org-404") + + self.assertEqual(raisedexp.exception.status, 404) + + def testGetInstallationWithExpiredJWT(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + with self.assertRaises(github.GithubException) as raisedexp: + github_integration.get_org_installation(org="GithubApp-Test-Org") + + self.assertEqual(raisedexp.exception.status, 401) + + def testGetAccessTokenWithExpiredJWT(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + with self.assertRaises(github.GithubException) as raisedexp: + github_integration.get_access_token(self.repo_installation_id) + + self.assertEqual(raisedexp.exception.status, 401) + + def testGetAccessTokenForNoInstallation(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + with self.assertRaises(github.UnknownObjectException) as raisedexp: + github_integration.get_access_token(40432121) + + self.assertEqual(raisedexp.exception.status, 404) + + def testGetAccessTokenWithInvalidPermissions(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + with self.assertRaises(github.GithubException) as raisedexp: + github_integration.get_access_token( + self.repo_installation_id, permissions={"test-permissions": "read"} + ) + + self.assertEqual(raisedexp.exception.status, 422) + + def testGetAccessTokenWithInvalidData(self): + github_integration = github.GithubIntegration( + integration_id=APP_ID, private_key=PRIVATE_KEY + ) + with self.assertRaises(github.GithubException) as raisedexp: + github_integration.get_access_token( + self.repo_installation_id, permissions="invalid_data" + ) + + self.assertEqual(raisedexp.exception.status, 400) diff --git a/tests/ReplayData/Authentication.testAppAuthentication.txt b/tests/ReplayData/Authentication.testAppAuthentication.txt new file mode 100644 index 0000000000..53391560e5 --- /dev/null +++ b/tests/ReplayData/Authentication.testAppAuthentication.txt @@ -0,0 +1,21 @@ +https +POST +api.github.com +None +/app/installations/29782936/access_tokens +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"permissions": {}} +201 +[('status', '201 CREATED'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', 'W/"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"token":"ghs_1llwuELtXN5HDOB99XhpcTXdJxbOuF0ZlSmj", "expires_at":"2024-11-25T01:00:02Z", "permissions":{"issues":"read","metadata":"read"}, "repository_selection":"selected"} + +https +GET +api.github.com +None +/users/ammarmallik +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '57'), ('content-length', '1338'), ('server', 'GitHub.com'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '60'), ('etag', 'W/"e5e65462690241eb7d9bc213cc00b3df2c75984d29a36b2ee8e151deaf4f3981"'), ('date', 'Tue, 25 Oct 2022 02:01:06 GMT'), ('x-ratelimit-reset', '1666666583'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-resource', 'core'), ('x-ratelimit-used', '3'), ('accept-ranges', 'bytes'), ('x-github-request-id', 'D8C1:7CE1:C3DF20:D546B4:63574361'), ('content-security-policy', "default-src 'none'"), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-xss-protection', '0'), ('x-content-type-options', 'nosniff'), ('x-frame-options', 'deny'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('access-control-allow-origin', '*'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('x-github-media-type', 'github.v3; format=jsom'), ('last-modified', 'Mon, 24 Oct 2022 20:26:22 GMT'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept, Accept-Encoding, Accept, X-Requested-With')] +{"login":"ammarmallik","id":29196434,"node_id":"MDQ6VXNlcjI5MTk2NDM0","avatar_url":"https://avatars.githubusercontent.com/u/29196434?v=4","gravatar_id":"","url":"https://api.github.com/users/ammarmallik","html_url":"https://github.com/ammarmallik","followers_url":"https://api.github.com/users/ammarmallik/followers","following_url":"https://api.github.com/users/ammarmallik/following{/other_user}","gists_url":"https://api.github.com/users/ammarmallik/gists{/gist_id}","starred_url":"https://api.github.com/users/ammarmallik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ammarmallik/subscriptions","organizations_url":"https://api.github.com/users/ammarmallik/orgs","repos_url":"https://api.github.com/users/ammarmallik/repos","events_url":"https://api.github.com/users/ammarmallik/events{/privacy}","received_events_url":"https://api.github.com/users/ammarmallik/received_events","type":"User","site_admin":false,"name":"Ammar Akbar","company":null,"blog":"","location":"Lahore","email":null,"hireable":true,"bio":null,"twitter_username":null,"public_repos":14,"public_gists":2,"followers":0,"following":3,"created_at":"2017-06-05T09:42:01Z","updated_at":"2022-10-24T20:26:22Z"} diff --git a/tests/ReplayData/GithubIntegration.testGetAccessToken.txt b/tests/ReplayData/GithubIntegration.testGetAccessToken.txt new file mode 100644 index 0000000000..4f37651d02 --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetAccessToken.txt @@ -0,0 +1,32 @@ +https +POST +api.github.com +None +/app/installations/30614431/access_tokens +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"permissions": {}} +201 +[('status', '201 CREATED'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', 'W/"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"token":"ghs_1llwuELtXN5HDOB99XhpcTXdJxbOuF0ZlSmj", "expires_at":"2024-11-25T01:00:02Z", "permissions":{"issues":"read","metadata":"read"}, "repository_selection":"selected"} + +https +POST +api.github.com +None +/app/installations/30614487/access_tokens +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"permissions": {}} +201 +[('status', '201 CREATED'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', 'W/"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"token":"ghs_V0xygF8yACXSDz5FM65QWV1BT2vtxw0cbgPw", "expires_at":"2024-11-25T01:00:02Z", "permissions":{"organization_administration":"read","administration":"write","issues":"write","metadata":"read"}, "repository_selection":"selected"} + +https +POST +api.github.com +None +/app/installations/30614431/access_tokens +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"permissions": {}} +201 +[('status', '201 CREATED'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', 'W/"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"token":"ghs_1llwuELtXN5HDOB99XhpcTXdJxbOuF0ZlSmj", "expires_at":"2024-11-25T01:00:02Z", "permissions":{"issues":"read","metadata":"read"}, "repository_selection":"selected"} diff --git a/tests/ReplayData/GithubIntegration.testGetAccessTokenForNoInstallation.txt b/tests/ReplayData/GithubIntegration.testGetAccessTokenForNoInstallation.txt new file mode 100644 index 0000000000..db1f2cb827 --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetAccessTokenForNoInstallation.txt @@ -0,0 +1,11 @@ +https +POST +api.github.com +None +/app/installations/40432121/access_tokens +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"permissions": {}} +404 +[('status', '404 NOT FOUND'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', '"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"message":"Not Found","documentation_url":"https://docs.github.com/rest/reference/apps#get-a-repository-installation-for-the-authenticated-app"} + diff --git a/tests/ReplayData/GithubIntegration.testGetAccessTokenWithExpiredJWT.txt b/tests/ReplayData/GithubIntegration.testGetAccessTokenWithExpiredJWT.txt new file mode 100644 index 0000000000..0ce4c84770 --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetAccessTokenWithExpiredJWT.txt @@ -0,0 +1,11 @@ +https +POST +api.github.com +None +/app/installations/30614431/access_tokens +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"permissions": {}} +401 +[('status', '401 UNAUTHORIZED'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', 'W/"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"message":"'Expiration time' claim ('exp') must be a numeric value representing the future time at which the assertion expires","documentation_url":"https://docs.github.com/rest"} + diff --git a/tests/ReplayData/GithubIntegration.testGetAccessTokenWithInvalidData.txt b/tests/ReplayData/GithubIntegration.testGetAccessTokenWithInvalidData.txt new file mode 100644 index 0000000000..86a61d112f --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetAccessTokenWithInvalidData.txt @@ -0,0 +1,11 @@ +https +POST +api.github.com +None +/app/installations/30614431/access_tokens +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"permissions": "invalid_data"} +400 +[('status', '400 BAD REQUEST'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', 'W/"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"message":"Problems parsing JSON","documentation_url":"https://docs.github.com/rest/reference/apps#create-an-installation-access-token-for-an-app"} + diff --git a/tests/ReplayData/GithubIntegration.testGetAccessTokenWithInvalidPermissions.txt b/tests/ReplayData/GithubIntegration.testGetAccessTokenWithInvalidPermissions.txt new file mode 100644 index 0000000000..a9b790c55e --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetAccessTokenWithInvalidPermissions.txt @@ -0,0 +1,10 @@ +https +POST +api.github.com +None +/app/installations/30614431/access_tokens +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"permissions": {"test-permissions": "read"}} +422 +[('status', '422 UNPROCESSABLE ENTITY'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', 'W/"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"message":"The permissions requested are not granted to this installation.","documentation_url":"https://docs.github.com/rest/reference/apps#create-an-installation-access-token-for-an-app"} diff --git a/tests/ReplayData/GithubIntegration.testGetAppInstallation.txt b/tests/ReplayData/GithubIntegration.testGetAppInstallation.txt new file mode 100644 index 0000000000..c7367f31a0 --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetAppInstallation.txt @@ -0,0 +1,11 @@ +https +GET +api.github.com +None +/app/installations/30614487 +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Accept': 'application/vnd.github.machine-man-preview+json'} +None +200 +[('status', '200 OK'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', '"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"id":30614487,"account":{"login":"GithubApp-Test-Org","id":116723333,"node_id":"O_kgDOBvUOhQ","avatar_url":"https://avatars.githubusercontent.com/u/116723333?v=4","gravatar_id":"","url":"https://api.github.com/users/GithubApp-Test-Org","html_url":"https://github.com/GithubApp-Test-Org","followers_url":"https://api.github.com/users/GithubApp-Test-Org/followers","following_url":"https://api.github.com/users/GithubApp-Test-Org/following{/other_user}","gists_url":"https://api.github.com/users/GithubApp-Test-Org/gists{/gist_id}","starred_url":"https://api.github.com/users/GithubApp-Test-Org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GithubApp-Test-Org/subscriptions","organizations_url":"https://api.github.com/users/GithubApp-Test-Org/orgs","repos_url":"https://api.github.com/users/GithubApp-Test-Org/repos","events_url":"https://api.github.com/users/GithubApp-Test-Org/events{/privacy}","received_events_url":"https://api.github.com/users/GithubApp-Test-Org/received_events","type":"Organization","site_admin":false},"repository_selection":"selected","access_tokens_url":"https://api.github.com/app/installations/30614487/access_tokens","repositories_url":"https://api.github.com/installation/repositories","html_url":"https://github.com/organizations/GithubApp-Test-Org/settings/installations/30614487","app_id":243473,"app_slug":"gh-actions-test-ammar","target_id":116723333,"target_type":"Organization","permissions":{"issues":"write","metadata":"read","administration":"write","organization_administration":"read"},"events":[],"created_at":"2022-10-26T11:15:21.000Z","updated_at":"2022-10-26T11:36:34.000Z","single_file_name":null,"has_multiple_single_files":false,"single_file_paths":[],"suspended_by":null,"suspended_at":null} + diff --git a/tests/ReplayData/GithubIntegration.testGetInstallationNotFound.txt b/tests/ReplayData/GithubIntegration.testGetInstallationNotFound.txt new file mode 100644 index 0000000000..ca39bc50e1 --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetInstallationNotFound.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/GithubApp-Test-Org-404/installation +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Accept': 'application/vnd.github.machine-man-preview+json'} +None +404 +[('status', '404 NOT FOUND'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', '"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"message":"Not Found","documentation_url":"https://docs.github.com/rest/reference/apps#get-a-repository-installation-for-the-authenticated-app"} diff --git a/tests/ReplayData/GithubIntegration.testGetInstallationWithExpiredJWT.txt b/tests/ReplayData/GithubIntegration.testGetInstallationWithExpiredJWT.txt new file mode 100644 index 0000000000..aae0ca58cd --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetInstallationWithExpiredJWT.txt @@ -0,0 +1,11 @@ +https +GET +api.github.com +None +/orgs/GithubApp-Test-Org/installation +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Accept': 'application/vnd.github.machine-man-preview+json'} +None +401 +[('status', '401 UNAUTHORIZED'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', 'W/"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"message":"'Expiration time' claim ('exp') must be a numeric value representing the future time at which the assertion expires","documentation_url":"https://docs.github.com/rest"} + diff --git a/tests/ReplayData/GithubIntegration.testGetInstallations.txt b/tests/ReplayData/GithubIntegration.testGetInstallations.txt new file mode 100644 index 0000000000..762608ab0f --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetInstallations.txt @@ -0,0 +1,11 @@ +https +GET +api.github.com +None +/app/installations +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Accept': 'application/vnd.github.machine-man-preview+json'} +None +200 +[('status', '200 OK'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', '"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +[{"id":30614487,"account":{"login":"GithubApp-Test-Org","id":116723333,"node_id":"O_kgDOBvUOhQ","avatar_url":"https://avatars.githubusercontent.com/u/116723333?v=4","gravatar_id":"","url":"https://api.github.com/users/GithubApp-Test-Org","html_url":"https://github.com/GithubApp-Test-Org","followers_url":"https://api.github.com/users/GithubApp-Test-Org/followers","following_url":"https://api.github.com/users/GithubApp-Test-Org/following{/other_user}","gists_url":"https://api.github.com/users/GithubApp-Test-Org/gists{/gist_id}","starred_url":"https://api.github.com/users/GithubApp-Test-Org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GithubApp-Test-Org/subscriptions","organizations_url":"https://api.github.com/users/GithubApp-Test-Org/orgs","repos_url":"https://api.github.com/users/GithubApp-Test-Org/repos","events_url":"https://api.github.com/users/GithubApp-Test-Org/events{/privacy}","received_events_url":"https://api.github.com/users/GithubApp-Test-Org/received_events","type":"Organization","site_admin":false},"repository_selection":"selected","access_tokens_url":"https://api.github.com/app/installations/30614487/access_tokens","repositories_url":"https://api.github.com/installation/repositories","html_url":"https://github.com/organizations/GithubApp-Test-Org/settings/installations/30614487","app_id":243473,"app_slug":"gh-actions-test-ammar","target_id":116723333,"target_type":"Organization","permissions":{"issues":"write","metadata":"read","administration":"write","organization_administration":"read"},"events":[],"created_at":"2022-10-26T11:15:21.000Z","updated_at":"2022-10-26T11:36:34.000Z","single_file_name":null,"has_multiple_single_files":false,"single_file_paths":[],"suspended_by":null,"suspended_at":null},{"id":30614431,"account":{"login":"ammarmallik","id":29196434,"node_id":"MDQ6VXNlcjI5MTk2NDM0","avatar_url":"https://avatars.githubusercontent.com/u/29196434?v=4","gravatar_id":"","url":"https://api.github.com/users/ammarmallik","html_url":"https://github.com/ammarmallik","followers_url":"https://api.github.com/users/ammarmallik/followers","following_url":"https://api.github.com/users/ammarmallik/following{/other_user}","gists_url":"https://api.github.com/users/ammarmallik/gists{/gist_id}","starred_url":"https://api.github.com/users/ammarmallik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ammarmallik/subscriptions","organizations_url":"https://api.github.com/users/ammarmallik/orgs","repos_url":"https://api.github.com/users/ammarmallik/repos","events_url":"https://api.github.com/users/ammarmallik/events{/privacy}","received_events_url":"https://api.github.com/users/ammarmallik/received_events","type":"User","site_admin":false},"repository_selection":"selected","access_tokens_url":"https://api.github.com/app/installations/30614431/access_tokens","repositories_url":"https://api.github.com/installation/repositories","html_url":"https://github.com/settings/installations/30614431","app_id":243473,"app_slug":"gh-actions-test-ammar","target_id":29196434,"target_type":"User","permissions":{"issues":"write","metadata":"read","administration":"write"},"events":[],"created_at":"2022-10-26T11:13:03.000Z","updated_at":"2022-10-26T11:13:03.000Z","single_file_name":null,"has_multiple_single_files":false,"single_file_paths":[],"suspended_by":null,"suspended_at":null}] + diff --git a/tests/ReplayData/GithubIntegration.testGetOrgInstallation.txt b/tests/ReplayData/GithubIntegration.testGetOrgInstallation.txt new file mode 100644 index 0000000000..229f163397 --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetOrgInstallation.txt @@ -0,0 +1,11 @@ +https +GET +api.github.com +None +/orgs/GithubApp-Test-Org/installation +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Accept': 'application/vnd.github.machine-man-preview+json'} +None +200 +[('status', '200 OK'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', '"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"id":30614487,"account":{"login":"GithubApp-Test-Org","id":116723333,"node_id":"O_kgDOBvUOhQ","avatar_url":"https://avatars.githubusercontent.com/u/116723333?v=4","gravatar_id":"","url":"https://api.github.com/users/GithubApp-Test-Org","html_url":"https://github.com/GithubApp-Test-Org","followers_url":"https://api.github.com/users/GithubApp-Test-Org/followers","following_url":"https://api.github.com/users/GithubApp-Test-Org/following{/other_user}","gists_url":"https://api.github.com/users/GithubApp-Test-Org/gists{/gist_id}","starred_url":"https://api.github.com/users/GithubApp-Test-Org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GithubApp-Test-Org/subscriptions","organizations_url":"https://api.github.com/users/GithubApp-Test-Org/orgs","repos_url":"https://api.github.com/users/GithubApp-Test-Org/repos","events_url":"https://api.github.com/users/GithubApp-Test-Org/events{/privacy}","received_events_url":"https://api.github.com/users/GithubApp-Test-Org/received_events","type":"Organization","site_admin":false},"repository_selection":"selected","access_tokens_url":"https://api.github.com/app/installations/30614487/access_tokens","repositories_url":"https://api.github.com/installation/repositories","html_url":"https://github.com/organizations/GithubApp-Test-Org/settings/installations/30614487","app_id":243473,"app_slug":"gh-actions-test-ammar","target_id":116723333,"target_type":"Organization","permissions":{"issues":"write","metadata":"read","administration":"write","organization_administration":"read"},"events":[],"created_at":"2022-10-26T11:15:21.000Z","updated_at":"2022-10-26T11:36:34.000Z","single_file_name":null,"has_multiple_single_files":false,"single_file_paths":[],"suspended_by":null,"suspended_at":null} + diff --git a/tests/ReplayData/GithubIntegration.testGetRepoInstallation.txt b/tests/ReplayData/GithubIntegration.testGetRepoInstallation.txt new file mode 100644 index 0000000000..f50c07925d --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetRepoInstallation.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/ammarmallik/test-runner/installation +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Accept': 'application/vnd.github.machine-man-preview+json'} +None +200 +[('status', '200 OK'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', '"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"id":30614431,"account":{"login":"ammarmallik","id":29196434,"node_id":"MDQ6VXNlcjI5MTk2NDM0","avatar_url":"https://avatars.githubusercontent.com/u/29196434?v=4","gravatar_id":"","url":"https://api.github.com/users/ammarmallik","html_url":"https://github.com/ammarmallik","followers_url":"https://api.github.com/users/ammarmallik/followers","following_url":"https://api.github.com/users/ammarmallik/following{/other_user}","gists_url":"https://api.github.com/users/ammarmallik/gists{/gist_id}","starred_url":"https://api.github.com/users/ammarmallik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ammarmallik/subscriptions","organizations_url":"https://api.github.com/users/ammarmallik/orgs","repos_url":"https://api.github.com/users/ammarmallik/repos","events_url":"https://api.github.com/users/ammarmallik/events{/privacy}","received_events_url":"https://api.github.com/users/ammarmallik/received_events","type":"User","site_admin":false},"repository_selection":"selected","access_tokens_url":"https://api.github.com/app/installations/30614431/access_tokens","repositories_url":"https://api.github.com/installation/repositories","html_url":"https://github.com/settings/installations/30614431","app_id":243473,"app_slug":"gh-actions-test-ammar","target_id":29196434,"target_type":"User","permissions":{"issues":"write","metadata":"read","administration":"write"},"events":[],"created_at":"2022-10-26T11:13:03.000Z","updated_at":"2022-10-26T11:13:03.000Z","single_file_name":null,"has_multiple_single_files":false,"single_file_paths":[],"suspended_by":null,"suspended_at":null} diff --git a/tests/ReplayData/GithubIntegration.testGetUserInstallation.txt b/tests/ReplayData/GithubIntegration.testGetUserInstallation.txt new file mode 100644 index 0000000000..38f8723a37 --- /dev/null +++ b/tests/ReplayData/GithubIntegration.testGetUserInstallation.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/users/ammarmallik/installation +{'Authorization': 'Bearer jwt_removed', 'User-Agent': 'PyGithub/Python', 'Accept': 'application/vnd.github.machine-man-preview+json'} +None +200 +[('status', '200 OK'), ('server', 'Github.com'), ('date', 'Mon, 24 Oct 2022 23:11:45 GMT'), ('content-type', 'application/json; charset=utf-8'), ('connection', 'keep-alive'), ('content-length', '1962'), ('etag', '"b11a1c9caabe35f1de0a13e597a3022d27d2bff0694c2ccb5a65edc3b4d18837"'), ('cache-control', 'public, max-age=60, s-maxage=60'), ('vary', 'Accept'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('access-control-allow-origin', '*'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('x-frame-options', 'deny'), ('x-content-type-options', 'nosniff'), ('x-xss-protection', '0'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('x-github-request-id', "E475:53DD:8B7A89E:11E38A79:63571BB0"), ('vary', 'Accept-Encoding, Accept, X-Requested-With'), ('content-security-policy', "default-src 'none'")] +{"id":30614431,"account":{"login":"ammarmallik","id":29196434,"node_id":"MDQ6VXNlcjI5MTk2NDM0","avatar_url":"https://avatars.githubusercontent.com/u/29196434?v=4","gravatar_id":"","url":"https://api.github.com/users/ammarmallik","html_url":"https://github.com/ammarmallik","followers_url":"https://api.github.com/users/ammarmallik/followers","following_url":"https://api.github.com/users/ammarmallik/following{/other_user}","gists_url":"https://api.github.com/users/ammarmallik/gists{/gist_id}","starred_url":"https://api.github.com/users/ammarmallik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ammarmallik/subscriptions","organizations_url":"https://api.github.com/users/ammarmallik/orgs","repos_url":"https://api.github.com/users/ammarmallik/repos","events_url":"https://api.github.com/users/ammarmallik/events{/privacy}","received_events_url":"https://api.github.com/users/ammarmallik/received_events","type":"User","site_admin":false},"repository_selection":"selected","access_tokens_url":"https://api.github.com/app/installations/30614431/access_tokens","repositories_url":"https://api.github.com/installation/repositories","html_url":"https://github.com/settings/installations/30614431","app_id":243473,"app_slug":"gh-actions-test-ammar","target_id":29196434,"target_type":"User","permissions":{"issues":"write","metadata":"read","administration":"write"},"events":[],"created_at":"2022-10-26T11:13:03.000Z","updated_at":"2022-10-26T11:13:03.000Z","single_file_name":null,"has_multiple_single_files":false,"single_file_paths":[],"suspended_by":null,"suspended_at":null} From c7e3ae94214eaa702121d6ff08c92d83af47ebd9 Mon Sep 17 00:00:00 2001 From: Sol Redfern <59831933+Tsuesun@users.noreply.github.com> Date: Mon, 13 Feb 2023 12:43:07 +0000 Subject: [PATCH 19/32] Add unarchiving support (#2391) --- .gitignore | 1 + github/Repository.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 4ed40f015a..ecf955bd15 100644 --- a/.gitignore +++ b/.gitignore @@ -46,5 +46,6 @@ /doc/doctrees/ .vscode* .venv +venv .tox/ .mypy_cache/ diff --git a/github/Repository.py b/github/Repository.py index 2575100675..e55b26dc33 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1582,7 +1582,7 @@ def edit( :param allow_merge_commit: bool :param allow_rebase_merge: bool :param delete_branch_on_merge: bool - :param archived: bool. Unarchiving repositories is currently not supported through API (https://docs.github.com/en/rest/reference/repos#update-a-repository) + :param archived: bool :rtype: None """ if name is None: @@ -1627,8 +1627,8 @@ def edit( assert delete_branch_on_merge is github.GithubObject.NotSet or isinstance( delete_branch_on_merge, bool ), delete_branch_on_merge - assert archived is github.GithubObject.NotSet or ( - isinstance(archived, bool) and archived is True + assert archived is github.GithubObject.NotSet or isinstance( + archived, bool ), archived post_parameters = { "name": name, From b7daaf19804e56bdfc2ec73b292716f966015a6f Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Sun, 19 Feb 2023 17:51:21 +0800 Subject: [PATCH 20/32] Add release drafter and pubilsh on tag creation (#2428) --- .github/release-drafter.yml | 45 ++++++++++++++++++++++++++++++ .github/workflows/ci.yml | 8 ++++++ .github/workflows/pypi-release.yml | 7 +++-- 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 .github/release-drafter.yml diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 0000000000..a8a2fb9ff0 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,45 @@ +name-template: 'v$RESOLVED_VERSION' +tag-template: 'v$RESOLVED_VERSION' +categories: + - title: 'Features' + labels: + - 'feature' + - 'enhancement' + - title: 'Bug Fixes' + labels: + - 'fix' + - 'bugfix' + - 'bug' + - title: 'Maintenance' + label: 'chore' +autolabeler: + - label: 'chore' + files: + - '*.md' + branch: + - '/docs{0,1}\/.+/' + - label: 'bug' + branch: + - '/fix\/.+/' + title: + - '/fix/i' + - label: 'enhancement' + branch: + - '/feature\/.+/' +change-template: '- $TITLE @$AUTHOR (#$NUMBER)' +change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. +version-resolver: + major: + labels: + - 'major' + minor: + labels: + - 'minor' + patch: + labels: + - 'patch' + default: minor +template: | + ## Changes + + $CHANGES diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 20137ef827..2adb26a3cb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,4 +24,12 @@ jobs: run: tox - name: Upload coverage to Codecov uses: codecov/codecov-action@v2.1.0 + draft: + runs-on: ubuntu-latest + needs: test + if: github.ref == 'refs/heads/master' + steps: + - uses: release-drafter/release-drafter@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 11d4f7172e..fd02089342 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -1,14 +1,15 @@ name: Publish to PyPI on: - release: - types: [created] + push: + tags: + - "*" jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: '3.x' - name: Install dependencies From 5d1d1612ad4e624b9958e42afe769fc3b3c36503 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Sun, 19 Feb 2023 18:12:47 +0800 Subject: [PATCH 21/32] Bump version to 1.58.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e46d5cf143..97e535648d 100755 --- a/setup.py +++ b/setup.py @@ -44,7 +44,7 @@ import setuptools -version = "1.57" +version = "1.58.0" if __name__ == "__main__": From 3ea91a3a36c8cd43af45c5ed3039482346f1e5d4 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Sun, 19 Feb 2023 19:29:29 +0800 Subject: [PATCH 22/32] Use use_scm_version to get current version from git tag (#2429) --- doc/changes.rst | 11 +++++++++++ doc/conf.py | 4 +++- setup.py | 6 ++---- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/doc/changes.rst b/doc/changes.rst index 4124742dac..9f9b5338c0 100644 --- a/doc/changes.rst +++ b/doc/changes.rst @@ -4,6 +4,17 @@ Change log Stable versions ~~~~~~~~~~~~~~~ +Version 1.58.0 (February 19, 2023) +----------------------------------- + +**Bug Fixes & Improvements** + +- Add unarchiving support @Tsuesun (#2391) +- Support full GitHub app authentication @dblanchette (#1986) +- Continue the PR #1899 @Felixoid (#2386) +- feat: add allow\_forking to Repository @IbrahimAH (#2380) +- Add code scanning alerts @eric-nieuwland (#2227) + Version 1.57 (November 05, 2022) ----------------------------------- diff --git a/doc/conf.py b/doc/conf.py index b818794559..3c634cc431 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -35,7 +35,9 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath("..")) -from setup import version as setupVersion # noqa: E402, isort:skip +from importlib.metadata import version # noqa: E402, isort:skip + +setupVersion = version("PyGithub") # -- General configuration ----------------------------------------------------- diff --git a/setup.py b/setup.py index 97e535648d..cb3e805530 100755 --- a/setup.py +++ b/setup.py @@ -44,13 +44,11 @@ import setuptools -version = "1.58.0" - - if __name__ == "__main__": setuptools.setup( name="PyGithub", - version=version, + use_scm_version=True, + setup_requires=["setuptools_scm"], description="Use the full Github API v3", author="Vincent Jacques", author_email="vincent@vincent-jacques.net", From 164076774130a66ead753257c6b1f9d864730d74 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Sun, 19 Feb 2023 19:33:25 +0800 Subject: [PATCH 23/32] Fix sphinx package name --- doc/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index 3c634cc431..f285a0579e 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -37,7 +37,7 @@ sys.path.insert(0, os.path.abspath("..")) from importlib.metadata import version # noqa: E402, isort:skip -setupVersion = version("PyGithub") +setupVersion = version("github") # -- General configuration ----------------------------------------------------- From 6540b76db0cee1a5b3281b0e8e1968854a1be377 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Sun, 19 Feb 2023 19:45:58 +0800 Subject: [PATCH 24/32] Fix package name again --- doc/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index f285a0579e..0dd2e8470d 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -37,7 +37,7 @@ sys.path.insert(0, os.path.abspath("..")) from importlib.metadata import version # noqa: E402, isort:skip -setupVersion = version("github") +setupVersion = version("pygithub") # -- General configuration ----------------------------------------------------- From 9c96faa702c5c050f50d5d9e46eaaed2e02d8a00 Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Sun, 19 Feb 2023 19:50:45 +0800 Subject: [PATCH 25/32] Add current dir sys.path as well --- doc/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/conf.py b/doc/conf.py index 0dd2e8470d..8b86fabe5b 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -35,6 +35,7 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath("..")) +sys.path.insert(0, os.path.abspath(".")) from importlib.metadata import version # noqa: E402, isort:skip setupVersion = version("pygithub") From def5223c215e6c6d8470417dbb2488d4dadfe8ee Mon Sep 17 00:00:00 2001 From: Liuyang Wan Date: Mon, 20 Feb 2023 09:22:59 +0800 Subject: [PATCH 26/32] RTD: install current project --- .readthedocs.yml | 2 ++ doc/conf.py | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 1b9c5e89fa..b78662aebb 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -11,4 +11,6 @@ sphinx: python: version: 3.8 install: + - method: pip + path: . - requirements: requirements.txt diff --git a/doc/conf.py b/doc/conf.py index 8b86fabe5b..0dd2e8470d 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -35,7 +35,6 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath("..")) -sys.path.insert(0, os.path.abspath(".")) from importlib.metadata import version # noqa: E402, isort:skip setupVersion = version("pygithub") From bdceae2f52ae58fc2e00a4cae72bd8dd12e1c9c3 Mon Sep 17 00:00:00 2001 From: Phillip Tran Date: Thu, 16 Feb 2023 12:39:39 -0600 Subject: [PATCH 27/32] pass requester base URL to integration (#2420) --- github/Requester.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/github/Requester.py b/github/Requester.py index 253fab620e..bddfa0a202 100644 --- a/github/Requester.py +++ b/github/Requester.py @@ -312,6 +312,7 @@ def __init__( self.__installation_authorization = None self.__app_auth = app_auth + self.__base_url = base_url self.__auth_lock = RLock() @@ -333,7 +334,6 @@ def __init__( else: self.__authorizationHeader = None - self.__base_url = base_url o = urllib.parse.urlparse(base_url) self.__hostname = o.hostname self.__port = o.port @@ -375,7 +375,9 @@ def _must_refresh_token(self) -> bool: def _get_installation_authorization(self): assert self.__app_auth is not None integration = GithubIntegration.GithubIntegration( - self.__app_auth.app_id, self.__app_auth.private_key + self.__app_auth.app_id, + self.__app_auth.private_key, + base_url=self.__base_url, ) return integration.get_access_token( self.__app_auth.installation_id, From e414c3227bb15819b443b4474f1aded433011bda Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 23 Feb 2023 14:52:10 +0100 Subject: [PATCH 28/32] Move CI to Python 3.11 release and 3.12 dev (#2434) --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2adb26a3cb..cf78b6e73c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ jobs: name: test (Python ${{ matrix.python-version }}) strategy: matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11-dev"] + python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12-dev"] steps: - uses: actions/checkout@v2 - name: Set up Python From 45f3d723ce16678287a5ab8b83a00d68c308ccc2 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Tue, 14 Mar 2023 23:40:43 +0100 Subject: [PATCH 29/32] Remove RLock from Requester (#2446) --- github/Requester.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/github/Requester.py b/github/Requester.py index bddfa0a202..8970c9d1dd 100644 --- a/github/Requester.py +++ b/github/Requester.py @@ -60,7 +60,6 @@ import time import urllib from io import IOBase -from multiprocessing import RLock import requests @@ -314,8 +313,6 @@ def __init__( self.__app_auth = app_auth self.__base_url = base_url - self.__auth_lock = RLock() - if password is not None: login = login_or_token b64 = ( @@ -388,10 +385,9 @@ def _refresh_token_if_needed(self) -> None: """Get a new access token from the GitHub app installation if the one we have is about to expire""" if not self.__installation_authorization: return - with self.__auth_lock: - if self._must_refresh_token(): - logging.debug("Refreshing access token") - self._refresh_token() + if self._must_refresh_token(): + logging.debug("Refreshing access token") + self._refresh_token() def _refresh_token(self) -> None: """In the context of a GitHub app, refresh the access token""" From 554b2b28db8e3c06915406cb10e39aceb38d16d7 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Tue, 14 Mar 2023 23:45:48 +0100 Subject: [PATCH 30/32] Add crypto extras to pyjwt, which pulls in cryptogaphy package (#2443) * Add crypto extras to pyjwt, which pulls in cryptogaphy package * Remove cryptography dependency from more places * Remove integrations extra from docs --- doc/introduction.rst | 3 --- requirements.txt | 2 +- setup.py | 7 ++++--- test-requirements.txt | 1 - 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/doc/introduction.rst b/doc/introduction.rst index ee4062cfec..cc8fa70edd 100644 --- a/doc/introduction.rst +++ b/doc/introduction.rst @@ -37,9 +37,6 @@ This package is in the `Python Package Index be enough. You can also clone it on `Github `__. -If you wish to use GitHub Integrations, you'll want to be sure to install the -'integrations' option: ``pip install PyGithub[integrations]`` - Licensing --------- diff --git a/requirements.txt b/requirements.txt index bc82296fc8..9a8d628f76 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ pynacl>=1.4.0 requests>=2.14.0 -pyjwt>=2.4.0 +pyjwt[crypto]>=2.4.0 sphinx<3 Jinja2<3.1 sphinx-rtd-theme<1.1 diff --git a/setup.py b/setup.py index cb3e805530..9fde83f65a 100755 --- a/setup.py +++ b/setup.py @@ -104,10 +104,11 @@ python_requires=">=3.7", install_requires=[ "deprecated", - "pyjwt>=2.4.0", + "pyjwt[crypto]>=2.4.0", "pynacl>=1.4.0", "requests>=2.14.0", ], - extras_require={"integrations": ["cryptography"]}, - tests_require=["cryptography", "httpretty>=1.0.3"], + # can be removed, still here to avoid breaking user code + extras_require={"integrations": []}, + tests_require=["httpretty>=1.0.3"], ) diff --git a/test-requirements.txt b/test-requirements.txt index f87e113a4f..ced0003cff 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,4 +1,3 @@ -cryptography httpretty>=1.0.3 pytest>=5.3 pytest-cov>=2.8 From 822fc05cd5aaf20c87317b32cd897b5a95bd8c60 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Fri, 17 Mar 2023 11:40:48 +0100 Subject: [PATCH 31/32] Add expiration argument back to GithubIntegration.create_jwt (#2439) * Add expiration argument back to create_jwt --- github/GithubIntegration.py | 10 ++++++++-- github/GithubIntegration.pyi | 2 +- tests/GithubIntegration.py | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/github/GithubIntegration.py b/github/GithubIntegration.py index ecc136c6cb..82c85bc9c2 100644 --- a/github/GithubIntegration.py +++ b/github/GithubIntegration.py @@ -90,17 +90,23 @@ def _get_installed_app(self, url): completed=True, ) - def create_jwt(self): + def create_jwt(self, expiration=None): """ Create a signed JWT https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#authenticating-as-a-github-app :return string: """ + if expiration is not None: + assert isinstance(expiration, int), expiration + assert ( + Consts.MIN_JWT_EXPIRY <= expiration <= Consts.MAX_JWT_EXPIRY + ), expiration + now = int(time.time()) payload = { "iat": now + self.jwt_issued_at, - "exp": now + self.jwt_expiry, + "exp": now + (expiration if expiration is not None else self.jwt_expiry), "iss": self.integration_id, } encrypted = jwt.encode(payload, key=self.private_key, algorithm="RS256") diff --git a/github/GithubIntegration.pyi b/github/GithubIntegration.pyi index 52a5c0198d..f1f202c51a 100644 --- a/github/GithubIntegration.pyi +++ b/github/GithubIntegration.pyi @@ -22,7 +22,7 @@ class GithubIntegration: ) -> None: ... def _get_installed_app(self, url: str) -> Installation: ... def _get_headers(self) -> Dict[str, str]: ... - def create_jwt(self, expiration: int = ...) -> str: ... + def create_jwt(self, expiration: Optional[int] = ...) -> str: ... def get_access_token( self, installation_id: int, permissions: Optional[Dict[str, str]] = ... ) -> InstallationAuthorization: ... diff --git a/tests/GithubIntegration.py b/tests/GithubIntegration.py index 37b1434480..c93c9c0184 100644 --- a/tests/GithubIntegration.py +++ b/tests/GithubIntegration.py @@ -61,6 +61,27 @@ def testCreateJWT(self): ) sys.modules["time"].time = self.origin_time + def testCreateJWTWithExpiration(self): + self.origin_time = sys.modules["time"].time + sys.modules["time"].time = lambda: 1550055331.7435968 + github_integration = github.GithubIntegration( + integration_id=APP_ID, + private_key=PRIVATE_KEY, + jwt_expiry=120, + jwt_issued_at=-30, + ) + token = github_integration.create_jwt(60) + payload = jwt.decode( + token, + key=PUBLIC_KEY, + algorithms=["RS256"], + options={"verify_exp": False}, + ) + self.assertDictEqual( + payload, {"iat": 1550055301, "exp": 1550055391, "iss": APP_ID} + ) + sys.modules["time"].time = self.origin_time + def testGetInstallations(self): github_integration = github.GithubIntegration( integration_id=APP_ID, private_key=PRIVATE_KEY From b2840b9917006ddcb794e0ede7d7a9cca4ccf0a9 Mon Sep 17 00:00:00 2001 From: LaurenceB <33420512+lbillinghamwrk@users.noreply.github.com> Date: Fri, 24 Mar 2023 18:59:50 +0000 Subject: [PATCH 32/32] fix(types): :label: align stubs for push restriction changes with implimentation In #1290 we changed the verbs in the methods for `def .*_{user,team}_push_restrictions` from `edit` to `replace` It looks like we missed that change to the method implimentation in the typestubs. This PR re-synchronizes them. implimentations at https://github.com/PyGithub/PyGithub/blame/master/github/Branch.py#L439 and https://github.com/PyGithub/PyGithub/blame/master/github/Branch.py#L472 (as far as I can tell, the pyi stub files didn't exist at time of #1290 --- github/Branch.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/github/Branch.pyi b/github/Branch.pyi index 6f6def2dd3..3c9184e77d 100644 --- a/github/Branch.pyi +++ b/github/Branch.pyi @@ -42,8 +42,8 @@ class Branch(NonCompletableGithubObject): strict: Union[_NotSetType, bool] = ..., contexts: Union[List[str], _NotSetType] = ..., ) -> None: ... - def edit_team_push_restrictions(self, *teams: str) -> None: ... - def edit_user_push_restrictions(self, *users: str) -> None: ... + def replace_team_push_restrictions(self, *teams: str) -> None: ... + def replace_user_push_restrictions(self, *users: str) -> None: ... def get_admin_enforcement(self) -> bool: ... def get_protection(self) -> BranchProtection: ... def get_required_pull_request_reviews(self) -> RequiredPullRequestReviews: ...