From 048c8a1df2cc45108deeb0ddabb7d032d12b1a15 Mon Sep 17 00:00:00 2001 From: Colby Gallup Date: Wed, 1 Jul 2020 21:27:05 -0500 Subject: [PATCH] Add support for deployment statuses (#1588) * Added DeploymentStatus class * Added stubs for DeploymentStatus class * Fixed headers for DeploymentStatus.py * Added get/list/create deployment status methods * Added DeploymentStatus repr * Added attribute check tests for DeploymentStatus * Added "create deployment status" test * Added test for Deployment.get_statuses() * Added Deployment.get_status() method Fixes #1586 --- github/Consts.py | 3 + github/Deployment.py | 63 +++++++ github/Deployment.pyi | 14 +- github/DeploymentStatus.py | 176 ++++++++++++++++++ github/DeploymentStatus.pyi | 35 ++++ tests/DeploymentStatus.py | 82 ++++++++ tests/ReplayData/DeploymentStatus.setUp.txt | 44 +++++ .../DeploymentStatus.testCreate.txt | 11 ++ .../DeploymentStatus.testGetStatuses.txt | 11 ++ 9 files changed, 437 insertions(+), 2 deletions(-) create mode 100644 github/DeploymentStatus.py create mode 100644 github/DeploymentStatus.pyi create mode 100644 tests/DeploymentStatus.py create mode 100644 tests/ReplayData/DeploymentStatus.setUp.txt create mode 100644 tests/ReplayData/DeploymentStatus.testCreate.txt create mode 100644 tests/ReplayData/DeploymentStatus.testGetStatuses.txt diff --git a/github/Consts.py b/github/Consts.py index dc1b6c8e..85a3b2cf 100644 --- a/github/Consts.py +++ b/github/Consts.py @@ -120,3 +120,6 @@ issueTimelineEventsPreview = "application/vnd.github.mockingbird-preview" # https://developer.github.com/v3/teams/#check-if-a-team-manages-a-repository teamRepositoryPermissions = "application/vnd.github.v3.repository+json" + +# https://developer.github.com/changes/2016-04-06-deployment-and-deployment-status-enhancements/ +deploymentEnhancementsPreview = "application/vnd.github.ant-man-preview+json" diff --git a/github/Deployment.py b/github/Deployment.py index 447844d3..287a8f21 100644 --- a/github/Deployment.py +++ b/github/Deployment.py @@ -3,6 +3,7 @@ ############################ Copyrights and license ############################ # # # Copyright 2020 Steve Kowalik # +# Copyright 2020 Colby Gallup # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -22,6 +23,8 @@ # # ################################################################################ +import github.Consts +import github.DeploymentStatus import github.GithubObject @@ -137,6 +140,66 @@ class Deployment(github.GithubObject.CompletableGithubObject): self._completeIfNotSet(self._repository_url) return self._repository_url.value + def get_statuses(self): + """ + :calls: `GET /repos/:owner/deployments/:deployment_id/statuses `_ + :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.DeploymentStatus.DeploymentStatus` + """ + return github.PaginatedList.PaginatedList( + github.DeploymentStatus.DeploymentStatus, + self._requester, + self.url + "/statuses", + None, + ) + + def get_status(self, id_): + """ + :calls: `GET /repos/:owner/deployments/:deployment_id/statuses/:status_id `_ + :param id_: int + :rtype: :class:`github.DeploymentStatus.DeploymentStatus` + """ + assert isinstance(id_, int), id_ + headers, data = self._requester.requestJsonAndCheck( + "GET", + self.url + "/statuses/" + str(id_), + headers={"Accept": github.Consts.deploymentEnhancementsPreview}, + ) + return github.DeploymentStatus.DeploymentStatus( + self._requester, headers, data, completed=True + ) + + def create_status( + self, + state, + target_url=github.GithubObject.NotSet, + description=github.GithubObject.NotSet, + ): + """ + :calls: `POST /repos/:owner/:repo/deployments/:deployment_id/statuses `_ + :param: state: string + :param: target_url: string + :param: description: string + :rtype: :class:`github.DeploymentStatus.DeploymentStatus` + """ + assert isinstance(state, str), state + assert target_url is github.GithubObject.NotSet or isinstance( + target_url, str + ), target_url + assert description is github.GithubObject.NotSet or isinstance( + description, str + ), target_url + post_parameters = {"state": state} + if target_url is not github.GithubObject.NotSet: + post_parameters["target_url"] = target_url + if description is not github.GithubObject.NotSet: + post_parameters["description"] = description + headers, data = self._requester.requestJsonAndCheck( + "POST", self.url + "/statuses", input=post_parameters, + ) + return github.DeploymentStatus.DeploymentStatus( + self._requester, headers, data, completed=True + ) + def _initAttributes(self): self._id = github.GithubObject.NotSet self._url = github.GithubObject.NotSet diff --git a/github/Deployment.pyi b/github/Deployment.pyi index ce4ddea0..d323ce86 100644 --- a/github/Deployment.pyi +++ b/github/Deployment.pyi @@ -1,13 +1,23 @@ from datetime import datetime -from typing import Any, Dict +from typing import Any, Dict, Union -from github.GithubObject import CompletableGithubObject +from github.DeploymentStatus import DeploymentStatus +from github.GithubObject import CompletableGithubObject, _NotSetType from github.NamedUser import NamedUser +from github.PaginatedList import PaginatedList class Deployment(CompletableGithubObject): def __repr__(self) -> str: ... def _initAttributes(self) -> None: ... def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... + def get_statuses(self) -> PaginatedList[DeploymentStatus]: ... + def get_status(self, id_: int) -> DeploymentStatus: ... + def create_status( + self, + state: str, + target_url: Union[str, _NotSetType] = ..., + description: Union[str, _NotSetType] = ..., + ) -> DeploymentStatus: ... @property def id(self) -> int: ... @property diff --git a/github/DeploymentStatus.py b/github/DeploymentStatus.py new file mode 100644 index 00000000..9d9d20be --- /dev/null +++ b/github/DeploymentStatus.py @@ -0,0 +1,176 @@ +# -*- coding: utf-8 -*- + +############################ Copyrights and license ############################ +# # +# Copyright 2020 Colby Gallup # +# # +# 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 DeploymentStatus(github.GithubObject.CompletableGithubObject): + """ + This class represents Deployment Statuses. The reference can be found here https://developer.github.com/v3/repos/deployments/ + """ + + def __repr__(self): + return self.get__repr__({"id": self._id.value, "url": self._url.value}) + + @property + def created_at(self): + """ + :type: datetime.datetime + """ + self._completeIfNotSet(self._created_at) + return self._created_at.value + + @property + def creator(self): + """ + :type: :class:`github.NamedUser.NamedUser` + """ + self._completeIfNotSet(self._creator) + return self._creator.value + + @property + def deployment_url(self): + """ + :type: string + """ + self._completeIfNotSet(self._deployment_url) + return self._deployment_url.value + + @property + def description(self): + """ + :type: string + """ + self._completeIfNotSet(self._description) + return self._description.value + + @property + def environment(self): + """ + :type: string + """ + self._completeIfNotSet(self._environment) + return self._environment.value + + @property + def repository_url(self): + """ + :type: string + """ + self._completeIfNotSet(self._repository_url) + return self._repository_url.value + + @property + def state(self): + """ + :type: string + """ + self._completeIfNotSet(self._state) + return self._state.value + + @property + def target_url(self): + """ + :type: string + """ + self._completeIfNotSet(self._target_url) + return self._target_url.value + + @property + def updated_at(self): + """ + :type: datetime.datetime + """ + self._completeIfNotSet(self._updated_at) + return self._updated_at.value + + @property + def url(self): + """ + :type: string + """ + self._completeIfNotSet(self._url) + return self._url.value + + @property + def id(self): + """ + :type: int + """ + self._completeIfNotSet(self._id) + return self._id.value + + @property + def node_id(self): + """ + :type: string + """ + self._completeIfNotSet(self._node_id) + return self._node_id.value + + def _initAttributes(self): + self._created_at = github.GithubObject.NotSet + self._creator = github.GithubObject.NotSet + self._deployment_url = github.GithubObject.NotSet + self._description = github.GithubObject.NotSet + self._environment = github.GithubObject.NotSet + self._repository_url = github.GithubObject.NotSet + self._state = github.GithubObject.NotSet + self._target_url = github.GithubObject.NotSet + self._updated_at = github.GithubObject.NotSet + self._url = github.GithubObject.NotSet + self._id = github.GithubObject.NotSet + self._node_id = github.GithubObject.NotSet + + def _useAttributes(self, attributes): + if "url" in attributes: # pragma no branch + self._url = self._makeStringAttribute(attributes["url"]) + if "id" in attributes: # pragma no branch + self._id = self._makeIntAttribute(attributes["id"]) + if "node_id" in attributes: # pragma no branch + self._node_id = self._makeStringAttribute(attributes["node_id"]) + if "created_at" in attributes: # pragma no branch + self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) + if "creator" in attributes: # pragma no branch + self._creator = self._makeClassAttribute( + github.NamedUser.NamedUser, attributes["creator"] + ) + if "deployment_url" in attributes: # pragma no branch + self._deployment_url = self._makeStringAttribute( + attributes["deployment_url"] + ) + if "description" in attributes: # pragma no branch + self._description = self._makeStringAttribute(attributes["description"]) + if "environment" in attributes: # pragma no branch + self._environment = self._makeStringAttribute(attributes["environment"]) + if "repository_url" in attributes: # pragma no branch + self._repository_url = self._makeStringAttribute( + attributes["repository_url"] + ) + if "state" in attributes: # pragma no branch + self._state = self._makeStringAttribute(attributes["state"]) + if "target_url" in attributes: # pragma no branch + self._target_url = self._makeStringAttribute(attributes["target_url"]) + if "updated_at" in attributes: # pragma no branch + self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) diff --git a/github/DeploymentStatus.pyi b/github/DeploymentStatus.pyi new file mode 100644 index 00000000..8df8d4d7 --- /dev/null +++ b/github/DeploymentStatus.pyi @@ -0,0 +1,35 @@ +from datetime import datetime +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: ... + def _useAttributes(self, attributes: Dict[str, Any]) -> None: ... + @property + def created_at(self) -> datetime: ... + @property + def creator(self) -> NamedUser: ... + @property + def deployment_url(self) -> str: ... + @property + def description(self) -> str: ... + @property + def environment(self) -> str: ... + @property + def repository_url(self) -> str: ... + @property + def state(self) -> str: ... + @property + def target_url(self) -> str: ... + @property + def updated_at(self) -> datetime: ... + @property + def url(self) -> str: ... + @property + def id(self) -> int: ... + @property + def node_id(self) -> str: ... diff --git a/tests/DeploymentStatus.py b/tests/DeploymentStatus.py new file mode 100644 index 00000000..9d92f3c5 --- /dev/null +++ b/tests/DeploymentStatus.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- + +############################ Copyrights and license ############################ +# # +# Copyright 2020 Colby Gallup # +# # +# 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 datetime + +from . import Framework + + +class DeploymentStatus(Framework.TestCase): + def setUp(self): + super().setUp() + self.deployment = ( + self.g.get_user().get_repo("PyGithub").get_deployment(242997115) + ) + self.status = self.deployment.get_status(344110026) + + def testAttributes(self): + self.assertEqual(self.status.id, 344110026) + created_at = datetime.datetime(2020, 6, 27, 18, 57, 35) + self.assertEqual(self.status.created_at, created_at) + self.assertEqual(self.status.creator.login, "colbygallup") + self.assertEqual( + self.status.deployment_url, + "https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115", + ) + self.assertEqual(self.status.description, "") + self.assertEqual(self.status.environment, "production") + self.assertEqual( + self.status.repository_url, + "https://api.github.com/repos/colbygallup/PyGithub", + ) + self.assertEqual(self.status.state, "failure") + self.assertEqual(self.status.target_url, "") + self.assertEqual(self.status.updated_at, created_at) + self.assertEqual( + self.status.url, + "https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/344110026", + ) + self.assertEqual( + self.status.node_id, "MDE2OkRlcGxveW1lbnRTdGF0dXMzNDQxMTAwMjY=", + ) + self.assertEqual( + repr(self.status), + 'DeploymentStatus(url="https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/344110026", id=344110026)', + ) + + def testCreate(self): + newStatus = self.deployment.create_status("success") + self.assertEqual(newStatus.state, "success") + self.assertEqual( + newStatus.repository_url, + "https://api.github.com/repos/colbygallup/PyGithub", + ) + + def testGetStatuses(self): + statuses = self.deployment.get_statuses() + self.assertListKeyEqual( + statuses, + lambda s: s.id, + [346100235, 344427441, 344110026, 344109923, 344107728], + ) diff --git a/tests/ReplayData/DeploymentStatus.setUp.txt b/tests/ReplayData/DeploymentStatus.setUp.txt new file mode 100644 index 00000000..4f2d8aca --- /dev/null +++ b/tests/ReplayData/DeploymentStatus.setUp.txt @@ -0,0 +1,44 @@ +https +GET +api.github.com +None +/user +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 02 Jul 2020 01:19:01 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1593654971'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"e63f028312f03dd6d6bdf9adfd721724"'), ('Last-Modified', 'Sun, 28 Jun 2020 20:40:57 GMT'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', ''), ('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, 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', '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', 'C6C6:5B44:B34741:13864A0:5EFD3605')] +{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false,"name":"Colby Gallup","company":null,"blog":"","location":null,"email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":7,"public_gists":0,"followers":3,"following":1,"created_at":"2015-12-29T03:57:25Z","updated_at":"2020-06-28T20:40:57Z"} + +https +GET +api.github.com +None +/repos/colbygallup/PyGithub +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 02 Jul 2020 01:19:01 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4958'), ('X-RateLimit-Reset', '1593654971'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"0025be492f41e2045e9bb90411bd4ced"'), ('Last-Modified', 'Sat, 27 Jun 2020 16:39:12 GMT'), ('X-OAuth-Scopes', 'repo'), ('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, 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', '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', 'C6C7:679E:825D2C:123E2B9:5EFD3605')] +{"id":275412792,"node_id":"MDEwOlJlcG9zaXRvcnkyNzU0MTI3OTI=","name":"PyGithub","full_name":"colbygallup/PyGithub","private":false,"owner":{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false},"html_url":"https://github.com/colbygallup/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/colbygallup/PyGithub","forks_url":"https://api.github.com/repos/colbygallup/PyGithub/forks","keys_url":"https://api.github.com/repos/colbygallup/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/colbygallup/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/colbygallup/PyGithub/teams","hooks_url":"https://api.github.com/repos/colbygallup/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/colbygallup/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/colbygallup/PyGithub/events","assignees_url":"https://api.github.com/repos/colbygallup/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/colbygallup/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/colbygallup/PyGithub/tags","blobs_url":"https://api.github.com/repos/colbygallup/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/colbygallup/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/colbygallup/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/colbygallup/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/colbygallup/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/colbygallup/PyGithub/languages","stargazers_url":"https://api.github.com/repos/colbygallup/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/colbygallup/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/colbygallup/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/colbygallup/PyGithub/subscription","commits_url":"https://api.github.com/repos/colbygallup/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/colbygallup/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/colbygallup/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/colbygallup/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/colbygallup/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/colbygallup/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/colbygallup/PyGithub/merges","archive_url":"https://api.github.com/repos/colbygallup/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/colbygallup/PyGithub/downloads","issues_url":"https://api.github.com/repos/colbygallup/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/colbygallup/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/colbygallup/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/colbygallup/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/colbygallup/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/colbygallup/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/colbygallup/PyGithub/deployments","created_at":"2020-06-27T16:39:11Z","updated_at":"2020-06-27T16:39:12Z","pushed_at":"2020-06-28T18:03:01Z","git_url":"git://github.com/colbygallup/PyGithub.git","ssh_url":"git@github.com:colbygallup/PyGithub.git","clone_url":"https://github.com/colbygallup/PyGithub.git","svn_url":"https://github.com/colbygallup/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":12928,"stargazers_count":0,"watchers_count":0,"language":null,"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"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master","permissions":{"admin":true,"push":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":true,"allow_rebase_merge":true,"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://avatars0.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":"2020-07-01T09:32:29Z","pushed_at":"2020-06-28T18:03:04Z","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":12845,"stargazers_count":3563,"watchers_count":3563,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1145,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":61,"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"},"forks":1145,"open_issues":61,"watchers":3563,"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://avatars0.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":"2020-07-01T09:32:29Z","pushed_at":"2020-06-28T18:03:04Z","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":12845,"stargazers_count":3563,"watchers_count":3563,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1145,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":61,"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"},"forks":1145,"open_issues":61,"watchers":3563,"default_branch":"master"},"network_count":1145,"subscribers_count":0} + +https +GET +api.github.com +None +/repos/colbygallup/PyGithub/deployments/242997115 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 02 Jul 2020 01:19:02 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4957'), ('X-RateLimit-Reset', '1593654971'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"5ff2a6c582ef6258b123bd4582282c09"'), ('Last-Modified', 'Thu, 02 Jul 2020 00:58:36 GMT'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', 'repo, repo_deployment'), ('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, 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', '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', 'C6C8:679D:37ED97:985895:5EFD3605')] +{"url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115","id":242997115,"node_id":"MDEwOkRlcGxveW1lbnQyNDI5OTcxMTU=","sha":"079f75a7264bfd68c0580aff184e17d6adefb5db","ref":"079f75a7264bfd68c0580aff184e17d6adefb5db","task":"deploy","payload":{},"original_environment":"production","environment":"production","description":"Test deployment for colbygallup:feature/deployment-statuses","creator":{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false},"created_at":"2020-06-27T17:53:18Z","updated_at":"2020-07-02T00:58:36Z","statuses_url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses","repository_url":"https://api.github.com/repos/colbygallup/PyGithub"} + +https +GET +api.github.com +None +/repos/colbygallup/PyGithub/deployments/242997115/statuses/344110026 +{'Accept': 'application/vnd.github.ant-man-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 02 Jul 2020 01:19:02 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4956'), ('X-RateLimit-Reset', '1593654971'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"72fddf66857afbc3277a344328b19e45"'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', 'repo, repo_deployment'), ('X-GitHub-Media-Type', 'github.ant-man-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, 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', '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', 'C6C9:5173:BE9B0A:1516EBC:5EFD3606')] +{"url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/344110026","id":344110026,"node_id":"MDE2OkRlcGxveW1lbnRTdGF0dXMzNDQxMTAwMjY=","state":"failure","creator":{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false},"description":"","environment":"production","target_url":"","created_at":"2020-06-27T18:57:35Z","updated_at":"2020-06-27T18:57:35Z","deployment_url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115","repository_url":"https://api.github.com/repos/colbygallup/PyGithub","environment_url":"","log_url":""} + diff --git a/tests/ReplayData/DeploymentStatus.testCreate.txt b/tests/ReplayData/DeploymentStatus.testCreate.txt new file mode 100644 index 00000000..b275c1de --- /dev/null +++ b/tests/ReplayData/DeploymentStatus.testCreate.txt @@ -0,0 +1,11 @@ +https +POST +api.github.com +None +/repos/colbygallup/PyGithub/deployments/242997115/statuses +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"state": "success"} +201 +[('Server', 'GitHub.com'), ('Date', 'Thu, 02 Jul 2020 00:58:36 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '1433'), ('Status', '201 Created'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4985'), ('X-RateLimit-Reset', '1593654970'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', '"f23fe16a0227d358ba977dee647fb2d7"'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', ''), ('Location', 'https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/346100235'), ('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, 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', '1; mode=block'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('X-GitHub-Request-Id', 'C560:6157:7404FF:11A4D5E:5EFD313C')] +{"url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/346100235","id":346100235,"node_id":"MDE2OkRlcGxveW1lbnRTdGF0dXMzNDYxMDAyMzU=","state":"success","creator":{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false},"description":"","environment":"production","target_url":"","created_at":"2020-07-02T00:58:36Z","updated_at":"2020-07-02T00:58:36Z","deployment_url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115","repository_url":"https://api.github.com/repos/colbygallup/PyGithub"} + diff --git a/tests/ReplayData/DeploymentStatus.testGetStatuses.txt b/tests/ReplayData/DeploymentStatus.testGetStatuses.txt new file mode 100644 index 00000000..d969c9e7 --- /dev/null +++ b/tests/ReplayData/DeploymentStatus.testGetStatuses.txt @@ -0,0 +1,11 @@ +https +GET +api.github.com +None +/repos/colbygallup/PyGithub/deployments/242997115/statuses +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 02 Jul 2020 01:02:03 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4975'), ('X-RateLimit-Reset', '1593654971'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"e7dd5cde31bbf22667e376a1b298e15d"'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', 'repo, repo_deployment'), ('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, 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', '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', 'C592:10B9:71F6A2:FC6052:5EFD320B')] +[{"url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/346100235","id":346100235,"node_id":"MDE2OkRlcGxveW1lbnRTdGF0dXMzNDYxMDAyMzU=","state":"success","creator":{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false},"description":"","environment":"production","target_url":"","created_at":"2020-07-02T00:58:36Z","updated_at":"2020-07-02T00:58:36Z","deployment_url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115","repository_url":"https://api.github.com/repos/colbygallup/PyGithub"},{"url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/344427441","id":344427441,"node_id":"MDE2OkRlcGxveW1lbnRTdGF0dXMzNDQ0Mjc0NDE=","state":"success","creator":{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false},"description":"","environment":"production","target_url":"","created_at":"2020-06-28T18:00:30Z","updated_at":"2020-06-28T18:00:30Z","deployment_url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115","repository_url":"https://api.github.com/repos/colbygallup/PyGithub"},{"url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/344110026","id":344110026,"node_id":"MDE2OkRlcGxveW1lbnRTdGF0dXMzNDQxMTAwMjY=","state":"failure","creator":{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false},"description":"","environment":"production","target_url":"","created_at":"2020-06-27T18:57:35Z","updated_at":"2020-06-27T18:57:35Z","deployment_url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115","repository_url":"https://api.github.com/repos/colbygallup/PyGithub"},{"url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/344109923","id":344109923,"node_id":"MDE2OkRlcGxveW1lbnRTdGF0dXMzNDQxMDk5MjM=","state":"success","creator":{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false},"description":"","environment":"production","target_url":"","created_at":"2020-06-27T18:57:10Z","updated_at":"2020-06-27T18:57:10Z","deployment_url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115","repository_url":"https://api.github.com/repos/colbygallup/PyGithub"},{"url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115/statuses/344107728","id":344107728,"node_id":"MDE2OkRlcGxveW1lbnRTdGF0dXMzNDQxMDc3Mjg=","state":"success","creator":{"login":"colbygallup","id":16471311,"node_id":"MDQ6VXNlcjE2NDcxMzEx","avatar_url":"https://avatars1.githubusercontent.com/u/16471311?v=4","gravatar_id":"","url":"https://api.github.com/users/colbygallup","html_url":"https://github.com/colbygallup","followers_url":"https://api.github.com/users/colbygallup/followers","following_url":"https://api.github.com/users/colbygallup/following{/other_user}","gists_url":"https://api.github.com/users/colbygallup/gists{/gist_id}","starred_url":"https://api.github.com/users/colbygallup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colbygallup/subscriptions","organizations_url":"https://api.github.com/users/colbygallup/orgs","repos_url":"https://api.github.com/users/colbygallup/repos","events_url":"https://api.github.com/users/colbygallup/events{/privacy}","received_events_url":"https://api.github.com/users/colbygallup/received_events","type":"User","site_admin":false},"description":"","environment":"production","target_url":"","created_at":"2020-06-27T18:48:21Z","updated_at":"2020-06-27T18:48:21Z","deployment_url":"https://api.github.com/repos/colbygallup/PyGithub/deployments/242997115","repository_url":"https://api.github.com/repos/colbygallup/PyGithub"}] +