From c5ab18f18dc9fa17d480b2f0db03472e52e1b4ed Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Wed, 8 Jan 2025 13:14:08 +0100 Subject: [PATCH 01/15] Sync GitReleaseAsset class with API spec (#3130) Adds the following attributes: - node_id --- github/GitReleaseAsset.py | 8 +++ tests/GitReleaseAsset.py | 58 ++++++++++++++++++++++ tests/ReplayData/GitReleaseAsset.setUp.txt | 32 ++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 tests/GitReleaseAsset.py create mode 100644 tests/ReplayData/GitReleaseAsset.setUp.txt diff --git a/github/GitReleaseAsset.py b/github/GitReleaseAsset.py index 7bfd036a64..3fb5c5a071 100644 --- a/github/GitReleaseAsset.py +++ b/github/GitReleaseAsset.py @@ -68,6 +68,7 @@ def _initAttributes(self) -> None: self._id: Attribute[int] = NotSet self._label: Attribute[str] = NotSet self._name: Attribute[str] = NotSet + self._node_id: Attribute[str] = NotSet self._size: Attribute[int] = NotSet self._state: Attribute[str] = NotSet self._updated_at: Attribute[datetime] = NotSet @@ -112,6 +113,11 @@ def name(self) -> str: self._completeIfNotSet(self._name) return self._name.value + @property + def node_id(self) -> str: + self._completeIfNotSet(self._node_id) + return self._node_id.value + @property def size(self) -> int: self._completeIfNotSet(self._size) @@ -169,6 +175,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._label = self._makeStringAttribute(attributes["label"]) 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 attributes: # pragma no branch self._size = self._makeIntAttribute(attributes["size"]) if "state" in attributes: # pragma no branch diff --git a/tests/GitReleaseAsset.py b/tests/GitReleaseAsset.py new file mode 100644 index 0000000000..8b55ae0058 --- /dev/null +++ b/tests/GitReleaseAsset.py @@ -0,0 +1,58 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2025 Enrico Minack # +# # +# 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 __future__ import annotations + +from datetime import datetime, timezone + +from . import Framework + +repo_name = "RepoTest" +user = "rickrickston123" +release_id = 28524234 + + +class GitReleaseAsset(Framework.TestCase): + def setUp(self): + super().setUp() + self.repo = self.g.get_user(user).get_repo(repo_name) + self.release = self.repo.get_release(release_id) + self.asset = self.release.assets[0] + + def testAttributes(self): + self.assertEqual( + self.asset.browser_download_url, "https://github.com/rickrickston123/RepoTest/releases/download/v1.0/fact" + ) + self.assertEqual(self.asset.content_type, "application/octet-stream") + self.assertEqual(self.asset.created_at, datetime(2020, 7, 14, 0, 58, 17, tzinfo=timezone.utc)) + self.assertEqual(self.asset.download_count, 0) + self.assertEqual(self.asset.id, 22848494) + self.assertIsNone(self.asset.label) + self.assertEqual(self.asset.name, "fact") + self.assertEqual(self.asset.node_id, "MDEyOlJlbGVhc2VBc3NldDIyODQ4NDk0") + self.assertEqual(self.asset.size, 40) + self.assertEqual(self.asset.state, "uploaded") + self.assertEqual(self.asset.updated_at, datetime(2020, 7, 14, 0, 58, 18, tzinfo=timezone.utc)) + self.assertEqual(self.asset.uploader.login, "rickrickston123") + self.assertEqual( + self.asset.url, "https://api.github.com/repos/rickrickston123/RepoTest/releases/assets/22848494" + ) diff --git a/tests/ReplayData/GitReleaseAsset.setUp.txt b/tests/ReplayData/GitReleaseAsset.setUp.txt new file mode 100644 index 0000000000..c515aff88b --- /dev/null +++ b/tests/ReplayData/GitReleaseAsset.setUp.txt @@ -0,0 +1,32 @@ +https +GET +api.github.com +None +/users/rickrickston123 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Tue, 14 Jul 2020 17:15:09 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4737'), ('X-RateLimit-Reset', '1594749126'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"f72fa7561e862bb9391d5440956a4d9b"'), ('Last-Modified', 'Tue, 14 Jul 2020 06:41:30 GMT'), ('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', '89C0:3C01:13C7153:20DEA2D:5F0DE81C')] +{"login":"rickrickston123","id":64711998,"node_id":"MDQ6VXNlcjY0NzExOTk4","avatar_url":"https://avatars0.githubusercontent.com/u/64711998?v=4","gravatar_id":"","url":"https://api.github.com/users/rickrickston123","html_url":"https://github.com/rickrickston123","followers_url":"https://api.github.com/users/rickrickston123/followers","following_url":"https://api.github.com/users/rickrickston123/following{/other_user}","gists_url":"https://api.github.com/users/rickrickston123/gists{/gist_id}","starred_url":"https://api.github.com/users/rickrickston123/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rickrickston123/subscriptions","organizations_url":"https://api.github.com/users/rickrickston123/orgs","repos_url":"https://api.github.com/users/rickrickston123/repos","events_url":"https://api.github.com/users/rickrickston123/events{/privacy}","received_events_url":"https://api.github.com/users/rickrickston123/received_events","type":"User","site_admin":false,"name":null,"company":null,"blog":"","location":null,"email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":2,"public_gists":0,"followers":0,"following":0,"created_at":"2020-05-02T22:39:16Z","updated_at":"2020-07-14T06:41:30Z","private_gists":0,"total_private_repos":2,"owned_private_repos":2,"disk_usage":65,"collaborators":0,"two_factor_authentication":false,"plan":{"name":"free","space":976562499,"collaborators":0,"private_repos":10000}} + +https +GET +api.github.com +None +/repos/rickrickston123/RepoTest +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Tue, 14 Jul 2020 17:15:09 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4736'), ('X-RateLimit-Reset', '1594749126'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"99dcef5058cca871445c2e0d357c6ff7"'), ('Last-Modified', 'Sun, 12 Jul 2020 07:34:45 GMT'), ('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', '89C8:7C5B:12D9BB2:1F8925C:5F0DE81D')] +{"id":279015286,"node_id":"MDEwOlJlcG9zaXRvcnkyNzkwMTUyODY=","name":"RepoTest","full_name":"rickrickston123/RepoTest","private":false,"owner":{"login":"rickrickston123","id":64711998,"node_id":"MDQ6VXNlcjY0NzExOTk4","avatar_url":"https://avatars0.githubusercontent.com/u/64711998?v=4","gravatar_id":"","url":"https://api.github.com/users/rickrickston123","html_url":"https://github.com/rickrickston123","followers_url":"https://api.github.com/users/rickrickston123/followers","following_url":"https://api.github.com/users/rickrickston123/following{/other_user}","gists_url":"https://api.github.com/users/rickrickston123/gists{/gist_id}","starred_url":"https://api.github.com/users/rickrickston123/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rickrickston123/subscriptions","organizations_url":"https://api.github.com/users/rickrickston123/orgs","repos_url":"https://api.github.com/users/rickrickston123/repos","events_url":"https://api.github.com/users/rickrickston123/events{/privacy}","received_events_url":"https://api.github.com/users/rickrickston123/received_events","type":"User","site_admin":false},"html_url":"https://github.com/rickrickston123/RepoTest","description":null,"fork":false,"url":"https://api.github.com/repos/rickrickston123/RepoTest","forks_url":"https://api.github.com/repos/rickrickston123/RepoTest/forks","keys_url":"https://api.github.com/repos/rickrickston123/RepoTest/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rickrickston123/RepoTest/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rickrickston123/RepoTest/teams","hooks_url":"https://api.github.com/repos/rickrickston123/RepoTest/hooks","issue_events_url":"https://api.github.com/repos/rickrickston123/RepoTest/issues/events{/number}","events_url":"https://api.github.com/repos/rickrickston123/RepoTest/events","assignees_url":"https://api.github.com/repos/rickrickston123/RepoTest/assignees{/user}","branches_url":"https://api.github.com/repos/rickrickston123/RepoTest/branches{/branch}","tags_url":"https://api.github.com/repos/rickrickston123/RepoTest/tags","blobs_url":"https://api.github.com/repos/rickrickston123/RepoTest/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rickrickston123/RepoTest/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rickrickston123/RepoTest/git/refs{/sha}","trees_url":"https://api.github.com/repos/rickrickston123/RepoTest/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rickrickston123/RepoTest/statuses/{sha}","languages_url":"https://api.github.com/repos/rickrickston123/RepoTest/languages","stargazers_url":"https://api.github.com/repos/rickrickston123/RepoTest/stargazers","contributors_url":"https://api.github.com/repos/rickrickston123/RepoTest/contributors","subscribers_url":"https://api.github.com/repos/rickrickston123/RepoTest/subscribers","subscription_url":"https://api.github.com/repos/rickrickston123/RepoTest/subscription","commits_url":"https://api.github.com/repos/rickrickston123/RepoTest/commits{/sha}","git_commits_url":"https://api.github.com/repos/rickrickston123/RepoTest/git/commits{/sha}","comments_url":"https://api.github.com/repos/rickrickston123/RepoTest/comments{/number}","issue_comment_url":"https://api.github.com/repos/rickrickston123/RepoTest/issues/comments{/number}","contents_url":"https://api.github.com/repos/rickrickston123/RepoTest/contents/{+path}","compare_url":"https://api.github.com/repos/rickrickston123/RepoTest/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rickrickston123/RepoTest/merges","archive_url":"https://api.github.com/repos/rickrickston123/RepoTest/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rickrickston123/RepoTest/downloads","issues_url":"https://api.github.com/repos/rickrickston123/RepoTest/issues{/number}","pulls_url":"https://api.github.com/repos/rickrickston123/RepoTest/pulls{/number}","milestones_url":"https://api.github.com/repos/rickrickston123/RepoTest/milestones{/number}","notifications_url":"https://api.github.com/repos/rickrickston123/RepoTest/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rickrickston123/RepoTest/labels{/name}","releases_url":"https://api.github.com/repos/rickrickston123/RepoTest/releases{/id}","deployments_url":"https://api.github.com/repos/rickrickston123/RepoTest/deployments","created_at":"2020-07-12T07:34:41Z","updated_at":"2020-07-12T07:34:45Z","pushed_at":"2020-07-14T00:11:49Z","git_url":"git://github.com/rickrickston123/RepoTest.git","ssh_url":"git@github.com:rickrickston123/RepoTest.git","clone_url":"https://github.com/rickrickston123/RepoTest.git","svn_url":"https://github.com/rickrickston123/RepoTest","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":{"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,"network_count":0,"subscribers_count":0} + +https +GET +api.github.com +None +/repos/rickrickston123/RepoTest/releases/28524234 +{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Tue, 14 Jul 2020 17:15:09 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4735'), ('X-RateLimit-Reset', '1594749125'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"0af43d7e5a11d1f3e8c6a83292de12c0"'), ('Last-Modified', 'Tue, 14 Jul 2020 00:58:20 GMT'), ('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', '89D0:0D15:11BC1BF:1E1E9DD:5F0DE81D')] +{"url":"https://api.github.com/repos/rickrickston123/RepoTest/releases/28524234","assets_url":"https://api.github.com/repos/rickrickston123/RepoTest/releases/28524234/assets","upload_url":"https://uploads.github.com/repos/rickrickston123/RepoTest/releases/28524234/assets{?name,label}","html_url":"https://github.com/rickrickston123/RepoTest/releases/tag/v1.0","id":28524234,"node_id":"MDc6UmVsZWFzZTI4NTI0MjM0","tag_name":"v1.0","target_commitish":"master","name":"Test","draft":false,"author":{"login":"rickrickston123","id":64711998,"node_id":"MDQ6VXNlcjY0NzExOTk4","avatar_url":"https://avatars0.githubusercontent.com/u/64711998?v=4","gravatar_id":"","url":"https://api.github.com/users/rickrickston123","html_url":"https://github.com/rickrickston123","followers_url":"https://api.github.com/users/rickrickston123/followers","following_url":"https://api.github.com/users/rickrickston123/following{/other_user}","gists_url":"https://api.github.com/users/rickrickston123/gists{/gist_id}","starred_url":"https://api.github.com/users/rickrickston123/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rickrickston123/subscriptions","organizations_url":"https://api.github.com/users/rickrickston123/orgs","repos_url":"https://api.github.com/users/rickrickston123/repos","events_url":"https://api.github.com/users/rickrickston123/events{/privacy}","received_events_url":"https://api.github.com/users/rickrickston123/received_events","type":"User","site_admin":false},"prerelease":false,"created_at":"2020-07-12T07:34:42Z","published_at":"2020-07-14T00:58:20Z","assets":[{"url":"https://api.github.com/repos/rickrickston123/RepoTest/releases/assets/22848494","id":22848494,"node_id":"MDEyOlJlbGVhc2VBc3NldDIyODQ4NDk0","name":"fact","label":null,"uploader":{"login":"rickrickston123","id":64711998,"node_id":"MDQ6VXNlcjY0NzExOTk4","avatar_url":"https://avatars0.githubusercontent.com/u/64711998?v=4","gravatar_id":"","url":"https://api.github.com/users/rickrickston123","html_url":"https://github.com/rickrickston123","followers_url":"https://api.github.com/users/rickrickston123/followers","following_url":"https://api.github.com/users/rickrickston123/following{/other_user}","gists_url":"https://api.github.com/users/rickrickston123/gists{/gist_id}","starred_url":"https://api.github.com/users/rickrickston123/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rickrickston123/subscriptions","organizations_url":"https://api.github.com/users/rickrickston123/orgs","repos_url":"https://api.github.com/users/rickrickston123/repos","events_url":"https://api.github.com/users/rickrickston123/events{/privacy}","received_events_url":"https://api.github.com/users/rickrickston123/received_events","type":"User","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":40,"download_count":0,"created_at":"2020-07-14T00:58:17Z","updated_at":"2020-07-14T00:58:18Z","browser_download_url":"https://github.com/rickrickston123/RepoTest/releases/download/v1.0/fact"}],"tarball_url":"https://api.github.com/repos/rickrickston123/RepoTest/tarball/v1.0","zipball_url":"https://api.github.com/repos/rickrickston123/RepoTest/zipball/v1.0","body":"Body"} From 1990eb927409e9947f57fb4c3f0b7b3185aeac21 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Wed, 8 Jan 2025 17:31:10 +0100 Subject: [PATCH 02/15] Make Pickle test use recorded data (#3137) Otherwise fetching repo data might be defered by rate limit and CI is blocked. --- tests/Connection.py | 10 ++-- tests/Framework.py | 48 ++++++++++++------- tests/Pickle.py | 5 +- .../Pickle.testPickleRepository.txt | 10 ++++ 4 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 tests/ReplayData/Pickle.testPickleRepository.txt diff --git a/tests/Connection.py b/tests/Connection.py index b6347b8b12..96353de423 100644 --- a/tests/Connection.py +++ b/tests/Connection.py @@ -63,9 +63,9 @@ class RecordingMockConnection(Framework.RecordingConnection): - def __init__(self, file, protocol, host, port, realConnection): + def __init__(self, protocol, host, port, realConnection): self._realConnection = realConnection - super().__init__(file, protocol, host, port) + super().__init__(protocol, host, port) @pytest.mark.parametrize( @@ -88,7 +88,8 @@ def testRecordAndReplay(replaying_connection_class, protocol, response_body, exp connection.getresponse.return_value = response # write mock response to buffer - recording_connection = RecordingMockConnection(file, protocol, host, None, lambda *args, **kwds: connection) + RecordingMockConnection.setOpenFile(lambda slf, mode: file) + recording_connection = RecordingMockConnection(protocol, host, None, lambda *args, **kwds: connection) recording_connection.request(verb, url, None, headers) recording_connection.getresponse() recording_connection.close() @@ -106,7 +107,8 @@ def testRecordAndReplay(replaying_connection_class, protocol, response_body, exp # rewind buffer and attempt to replay response from it file.seek(0) - replaying_connection = replaying_connection_class(file, host=host, port=None) + replaying_connection_class.setOpenFile(lambda slf, mode: file) + replaying_connection = replaying_connection_class(host=host, port=None) replaying_connection.request(verb, url, None, headers) replaying_connection.getresponse() diff --git a/tests/Framework.py b/tests/Framework.py index 8269150ead..44360a8cfd 100644 --- a/tests/Framework.py +++ b/tests/Framework.py @@ -142,10 +142,16 @@ def fixAuthorizationHeader(headers): class RecordingConnection: - def __init__(self, file, protocol, host, port, *args, **kwds): + __openFile = None + + @staticmethod + def setOpenFile(func): + RecordingConnection.__openFile = func + + def __init__(self, protocol, host, port, *args, **kwds): + self.__file = self.__openFile("w") # write operations make the assumption that the file is not in binary mode - assert isinstance(file, io.TextIOBase) - self.__file = file + assert isinstance(self.__file, io.TextIOBase) self.__protocol = protocol self.__host = host self.__port = port @@ -194,20 +200,26 @@ def __writeLine(self, line): class RecordingHttpConnection(RecordingConnection): _realConnection = github.Requester.HTTPRequestsConnectionClass - def __init__(self, file, *args, **kwds): - super().__init__(file, "http", *args, **kwds) + def __init__(self, *args, **kwds): + super().__init__("http", *args, **kwds) class RecordingHttpsConnection(RecordingConnection): _realConnection = github.Requester.HTTPSRequestsConnectionClass - def __init__(self, file, *args, **kwds): - super().__init__(file, "https", *args, **kwds) + def __init__(self, *args, **kwds): + super().__init__("https", *args, **kwds) class ReplayingConnection: - def __init__(self, file, protocol, host, port, *args, **kwds): - self.__file = file + __openFile = None + + @staticmethod + def setOpenFile(func): + ReplayingConnection.__openFile = func + + def __init__(self, protocol, host, port, *args, **kwds): + self.__file = self.__openFile("r") self.__protocol = protocol self.__host = host self.__port = port @@ -283,15 +295,15 @@ def close(self): class ReplayingHttpConnection(ReplayingConnection): _realConnection = github.Requester.HTTPRequestsConnectionClass - def __init__(self, file, *args, **kwds): - super().__init__(file, "http", *args, **kwds) + def __init__(self, *args, **kwds): + super().__init__("http", *args, **kwds) class ReplayingHttpsConnection(ReplayingConnection): _realConnection = github.Requester.HTTPSRequestsConnectionClass - def __init__(self, file, *args, **kwds): - super().__init__(file, "https", *args, **kwds) + def __init__(self, *args, **kwds): + super().__init__("https", *args, **kwds) class BasicTestCase(unittest.TestCase): @@ -312,9 +324,10 @@ def setUp(self): if ( self.recordMode ): # pragma no cover (Branch useful only when recording new tests, not used during automated tests) + RecordingConnection.setOpenFile(self.__openFile) github.Requester.Requester.injectConnectionClasses( - lambda ignored, *args, **kwds: RecordingHttpConnection(self.__openFile("w"), *args, **kwds), - lambda ignored, *args, **kwds: RecordingHttpsConnection(self.__openFile("w"), *args, **kwds), + RecordingHttpConnection, + RecordingHttpsConnection, ) import GithubCredentials # type: ignore @@ -333,9 +346,10 @@ def setUp(self): else None ) else: + ReplayingConnection.setOpenFile(self.__openFile) github.Requester.Requester.injectConnectionClasses( - lambda ignored, *args, **kwds: ReplayingHttpConnection(self.__openFile("r"), *args, **kwds), - lambda ignored, *args, **kwds: ReplayingHttpsConnection(self.__openFile("r"), *args, **kwds), + ReplayingHttpConnection, + ReplayingHttpsConnection, ) self.login = github.Auth.Login("login", "password") self.oauth_token = github.Auth.Token("oauth_token") diff --git a/tests/Pickle.py b/tests/Pickle.py index bc9fd52804..f2bc5f78d8 100644 --- a/tests/Pickle.py +++ b/tests/Pickle.py @@ -23,16 +23,17 @@ ################################################################################ import pickle -import unittest import github from github.PaginatedList import PaginatedList from github.Repository import Repository +from . import Framework + REPO_NAME = "PyGithub/PyGithub" -class Pickle(unittest.TestCase): +class Pickle(Framework.TestCase): def testPickleGithub(self): gh = github.Github() gh2 = pickle.loads(pickle.dumps(gh)) diff --git a/tests/ReplayData/Pickle.testPickleRepository.txt b/tests/ReplayData/Pickle.testPickleRepository.txt new file mode 100644 index 0000000000..88ac34a444 --- /dev/null +++ b/tests/ReplayData/Pickle.testPickleRepository.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Fri, 25 Aug 2023 22:18:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'public, max-age=60, s-maxage=60'), ('Vary', 'Accept, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"30c1df371a44c445b7125f2d17df44062f98c1725ddf212dd09cabdd8fde9389"'), ('Last-Modified', 'Fri, 25 Aug 2023 15:12:40 GMT'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('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-RateLimit-Limit', '60'), ('X-RateLimit-Remaining', '52'), ('X-RateLimit-Reset', '1693004247'), ('X-RateLimit-Resource', 'core'), ('X-RateLimit-Used', '8'), ('Accept-Ranges', 'bytes'), ('Content-Length', '1427'), ('X-GitHub-Request-Id', '9DE4:9CCE:5DA8631:5E9093E:64E928C0')] +{"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":"2023-08-25T15:12:40Z","pushed_at":"2023-08-25T22:01:27Z","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":13634,"stargazers_count":6209,"watchers_count":6209,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1662,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":286,"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":1662,"open_issues":286,"watchers":6209,"default_branch":"main","temp_clone_token":null,"organization":{"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},"network_count":1662,"subscribers_count":112} From ebf3fe8e7eaaa3b7ed68c2de232c073caf786883 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Wed, 8 Jan 2025 17:36:33 +0100 Subject: [PATCH 03/15] Sync GitRelease class with API spec (#3129) Adds the following attributes: - assets_url - body_html - body_text - discussion_url - documentation_url - mentions_count - message - name - node_id - reactions - status --- github/GitRelease.py | 86 ++++++++++++++++++++++++++++++++++++++++++++ tests/GitRelease.py | 26 ++++++++++++++ 2 files changed, 112 insertions(+) diff --git a/github/GitRelease.py b/github/GitRelease.py index d5f4e8ef35..f23972b422 100644 --- a/github/GitRelease.py +++ b/github/GitRelease.py @@ -84,15 +84,26 @@ class GitRelease(CompletableGithubObject): def _initAttributes(self) -> None: self._assets: Attribute[list[github.GitReleaseAsset.GitReleaseAsset]] = NotSet + self._assets_url: Attribute[str] = NotSet self._author: Attribute[github.NamedUser.NamedUser] = NotSet self._body: Attribute[str] = NotSet + self._body_html: Attribute[str] = NotSet + self._body_text: Attribute[str] = NotSet self._created_at: Attribute[datetime] = NotSet + self._discussion_url: Attribute[str] = NotSet + self._documentation_url: Attribute[str] = NotSet self._draft: Attribute[bool] = NotSet self._generate_release_notes: Attribute[bool] = NotSet self._html_url: Attribute[str] = NotSet self._id: Attribute[int] = NotSet + self._mentions_count: Attribute[int] = NotSet + self._message: Attribute[str] = NotSet + self._name: Attribute[str] = NotSet + self._node_id: Attribute[str] = NotSet self._prerelease: Attribute[bool] = NotSet self._published_at: Attribute[datetime] = NotSet + self._reactions: Attribute[dict[str, Any]] = NotSet + self._status: Attribute[str] = NotSet self._tag_name: Attribute[str] = NotSet self._tarball_url: Attribute[str] = NotSet self._target_commitish: Attribute[str] = NotSet @@ -109,6 +120,11 @@ def assets(self) -> list[github.GitReleaseAsset.GitReleaseAsset]: self._completeIfNotSet(self._assets) return self._assets.value + @property + def assets_url(self) -> str: + self._completeIfNotSet(self._assets_url) + return self._assets_url.value + @property def author(self) -> github.NamedUser.NamedUser: self._completeIfNotSet(self._author) @@ -119,11 +135,31 @@ def body(self) -> str: self._completeIfNotSet(self._body) return self._body.value + @property + def body_html(self) -> str: + self._completeIfNotSet(self._body_html) + return self._body_html.value + + @property + def body_text(self) -> str: + self._completeIfNotSet(self._body_text) + return self._body_text.value + @property def created_at(self) -> datetime: self._completeIfNotSet(self._created_at) return self._created_at.value + @property + def discussion_url(self) -> str: + self._completeIfNotSet(self._discussion_url) + return self._discussion_url.value + + @property + def documentation_url(self) -> str: + self._completeIfNotSet(self._documentation_url) + return self._documentation_url.value + @property def draft(self) -> bool: self._completeIfNotSet(self._draft) @@ -139,6 +175,26 @@ def id(self) -> int: self._completeIfNotSet(self._id) return self._id.value + @property + def mentions_count(self) -> int: + self._completeIfNotSet(self._mentions_count) + return self._mentions_count.value + + @property + def message(self) -> str: + self._completeIfNotSet(self._message) + return self._message.value + + @property + def name(self) -> str: + self._completeIfNotSet(self._name) + return self._name.value + + @property + def node_id(self) -> str: + self._completeIfNotSet(self._node_id) + return self._node_id.value + @property def prerelease(self) -> bool: self._completeIfNotSet(self._prerelease) @@ -149,6 +205,16 @@ def published_at(self) -> datetime: self._completeIfNotSet(self._published_at) return self._published_at.value + @property + def reactions(self) -> dict[str, Any]: + self._completeIfNotSet(self._reactions) + return self._reactions.value + + @property + def status(self) -> str: + self._completeIfNotSet(self._status) + return self._status.value + @property def tag_name(self) -> str: self._completeIfNotSet(self._tag_name) @@ -311,12 +377,22 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._assets = self._makeListOfClassesAttribute( github.GitReleaseAsset.GitReleaseAsset, attributes["assets"] ) + if "assets_url" in attributes: # pragma no branch + self._assets_url = self._makeStringAttribute(attributes["assets_url"]) if "author" in attributes: self._author = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["author"]) if "body" in attributes: self._body = self._makeStringAttribute(attributes["body"]) + if "body_html" in attributes: # pragma no branch + self._body_html = self._makeStringAttribute(attributes["body_html"]) + if "body_text" in attributes: # pragma no branch + self._body_text = self._makeStringAttribute(attributes["body_text"]) if "created_at" in attributes: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) + if "discussion_url" in attributes: # pragma no branch + self._discussion_url = self._makeStringAttribute(attributes["discussion_url"]) + if "documentation_url" in attributes: # pragma no branch + self._documentation_url = self._makeStringAttribute(attributes["documentation_url"]) if "draft" in attributes: self._draft = self._makeBoolAttribute(attributes["draft"]) if "generate_release_notes" in attributes: @@ -325,12 +401,22 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: self._id = self._makeIntAttribute(attributes["id"]) + if "mentions_count" in attributes: # pragma no branch + self._mentions_count = self._makeIntAttribute(attributes["mentions_count"]) + if "message" in attributes: # pragma no branch + self._message = self._makeStringAttribute(attributes["message"]) if "name" in attributes: self._title = self._makeStringAttribute(attributes["name"]) + if "node_id" in attributes: # pragma no branch + self._node_id = self._makeStringAttribute(attributes["node_id"]) if "prerelease" in attributes: self._prerelease = self._makeBoolAttribute(attributes["prerelease"]) if "published_at" in attributes: self._published_at = self._makeDatetimeAttribute(attributes["published_at"]) + if "reactions" in attributes: # pragma no branch + self._reactions = self._makeDictAttribute(attributes["reactions"]) + if "status" in attributes: # pragma no branch + self._status = self._makeStringAttribute(attributes["status"]) if "tag_name" in attributes: self._tag_name = self._makeStringAttribute(attributes["tag_name"]) if "tarball_url" in attributes: diff --git a/tests/GitRelease.py b/tests/GitRelease.py index 37dfd71c44..57b3335193 100644 --- a/tests/GitRelease.py +++ b/tests/GitRelease.py @@ -43,6 +43,8 @@ # # ################################################################################ +from __future__ import annotations + import os import zipfile from datetime import datetime, timezone @@ -125,8 +127,32 @@ def tearDownNewRelease(self): def testAttributes(self): release = self.release + self.assertEqual( + release.assets[0].url, "https://api.github.com/repos/rickrickston123/RepoTest/releases/assets/22848494" + ) + self.assertEqual( + release.assets_url, "https://api.github.com/repos/rickrickston123/RepoTest/releases/28524234/assets" + ) + self.assertEqual(release.author.login, "rickrickston123") + self.assertEqual(release.body, "Body") + self.assertIsNone(release.body_html) + self.assertIsNone(release.body_text) + self.assertEqual(release.created_at, datetime(2020, 7, 12, 7, 34, 42, tzinfo=timezone.utc)) + self.assertIsNone(release.discussion_url) + self.assertIsNone(release.documentation_url) + self.assertEqual(release.draft, False) + self.assertEqual(release.html_url, "https://github.com/rickrickston123/RepoTest/releases/tag/v1.0") self.assertEqual(release.id, release_id) + self.assertIsNone(release.mentions_count) + self.assertIsNone(release.message) + self.assertIsNone(release.name) + self.assertEqual(release.node_id, "MDc6UmVsZWFzZTI4NTI0MjM0") + self.assertEqual(release.prerelease, False) + self.assertEqual(release.published_at, datetime(2020, 7, 14, 0, 58, 20, tzinfo=timezone.utc)) + self.assertIsNone(release.reactions) + self.assertIsNone(release.status) self.assertEqual(release.tag_name, tag) + self.assertEqual(release.tarball_url, "https://api.github.com/repos/rickrickston123/RepoTest/tarball/v1.0") self.assertEqual(release.target_commitish, "master") self.assertEqual( release.upload_url, From 048876403bdea0048b5153079614109507130455 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 10:55:53 +0100 Subject: [PATCH 04/15] Use id and tree_id from simple-commit to populate GitCommit.sha and GitCommit.tree (#3167) --- github/GitCommit.py | 27 ++++++++++++++++++--------- tests/WorkflowRun.py | 2 ++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/github/GitCommit.py b/github/GitCommit.py index bca61112a2..bbf31b307f 100644 --- a/github/GitCommit.py +++ b/github/GitCommit.py @@ -40,12 +40,15 @@ from __future__ import annotations from datetime import datetime -from typing import Any +from typing import TYPE_CHECKING, Any import github.GitAuthor -import github.GithubObject import github.GitTree -from github.GithubObject import Attribute, CompletableGithubObject, NotSet +from github.GithubObject import Attribute, CompletableGithubObject, NotSet, is_defined, is_undefined + +if TYPE_CHECKING: + from github.GitAuthor import GitAuthor + from github.GitTree import GitTree class GitCommit(CompletableGithubObject): @@ -68,9 +71,9 @@ class GitCommit(CompletableGithubObject): """ def _initAttributes(self) -> None: - self._author: Attribute[github.GitAuthor.GitAuthor] = NotSet + self._author: Attribute[GitAuthor] = NotSet self._comment_count: Attribute[int] = NotSet - self._committer: Attribute[github.GitAuthor.GitAuthor] = NotSet + self._committer: Attribute[GitAuthor] = NotSet self._html_url: Attribute[str] = NotSet self._id: Attribute[str] = NotSet self._message: Attribute[str] = NotSet @@ -78,7 +81,7 @@ def _initAttributes(self) -> None: self._parents: Attribute[list[GitCommit]] = NotSet self._sha: Attribute[str] = NotSet self._timestamp: Attribute[datetime] = NotSet - self._tree: Attribute[github.GitTree.GitTree] = NotSet + self._tree: Attribute[GitTree] = NotSet self._tree_id: Attribute[str] = NotSet self._url: Attribute[str] = NotSet self._verification: Attribute[dict[str, Any]] = NotSet @@ -91,7 +94,7 @@ def _identity(self) -> str: return self.sha @property - def author(self) -> github.GitAuthor.GitAuthor: + def author(self) -> GitAuthor: self._completeIfNotSet(self._author) return self._author.value @@ -101,7 +104,7 @@ def comment_count(self) -> int: return self._comment_count.value @property - def committer(self) -> github.GitAuthor.GitAuthor: + def committer(self) -> GitAuthor: self._completeIfNotSet(self._committer) return self._committer.value @@ -132,6 +135,9 @@ def parents(self) -> list[GitCommit]: @property def sha(self) -> str: + # if populated from a simple-commit, id actually holds the sha + if is_undefined(self._sha) and is_defined(self._id): + return self._id.value self._completeIfNotSet(self._sha) return self._sha.value @@ -141,7 +147,10 @@ def timestamp(self) -> datetime: return self._timestamp.value @property - def tree(self) -> github.GitTree.GitTree: + def tree(self) -> GitTree: + # if populated from a simple-commit, tree_id holds the sha + if is_undefined(self._tree) and is_defined(self._tree_id): + return github.GitTree.GitTree(self._requester, self._headers, {"sha": self._tree_id.value}) self._completeIfNotSet(self._tree) return self._tree.value diff --git a/tests/WorkflowRun.py b/tests/WorkflowRun.py index 03e3b1de2e..2e9040c0ee 100644 --- a/tests/WorkflowRun.py +++ b/tests/WorkflowRun.py @@ -103,7 +103,9 @@ def testAttributes(self): self.workflow_run.workflow_url, "https://api.github.com/repos/PyGithub/PyGithub/actions/workflows/1903133", ) + self.assertEqual(self.workflow_run.head_commit.sha, "c6e5cac67a58a4eb11f1f28567a77a6e2cc8ee98") self.assertEqual(self.workflow_run.head_commit.message, "add attribute 'name' on WorkflowRun") + self.assertEqual(self.workflow_run.head_commit.tree.sha, "3ce398f9ee2571549b7fea545bfa5bf28e3ca0f5") self.assertEqual(self.workflow_run.repository.name, "PyGithub") self.assertEqual(self.workflow_run.head_repository.name, "PyGithub") From be44bb58a9c97ef2b14292d7ca629a808d2e3803 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 11:57:38 +0100 Subject: [PATCH 05/15] Sync IssueEvent class with API spec (#3142) Adds the following attributes: - author_association - performed_via_github_app - project_card - review_requester --- github/IssueEvent.py | 78 ++++++++++--- tests/IssueEvent.py | 161 ++++++++++++++++++++++++-- tests/ReplayData/IssueEvent.setUp.txt | 112 +++++++++--------- 3 files changed, 271 insertions(+), 80 deletions(-) diff --git a/github/IssueEvent.py b/github/IssueEvent.py index 676b5ce3c5..dc582ab064 100644 --- a/github/IssueEvent.py +++ b/github/IssueEvent.py @@ -42,15 +42,25 @@ from __future__ import annotations from datetime import datetime -from typing import Any +from typing import TYPE_CHECKING, Any +import github.GithubApp import github.GithubObject import github.Issue import github.Label import github.Milestone import github.NamedUser +import github.Team from github.GithubObject import Attribute, CompletableGithubObject, NotSet +if TYPE_CHECKING: + from github.GithubApp import GithubApp + from github.Issue import Issue + from github.Label import Label + from github.Milestone import Milestone + from github.NamedUser import NamedUser + from github.Team import Team + class IssueEvent(CompletableGithubObject): """ @@ -66,43 +76,52 @@ class IssueEvent(CompletableGithubObject): """ def _initAttributes(self) -> None: - self._actor: Attribute[github.NamedUser.NamedUser] = NotSet - self._assignee: Attribute[github.NamedUser.NamedUser] = NotSet - self._assigner: Attribute[github.NamedUser.NamedUser] = NotSet + self._actor: Attribute[NamedUser] = NotSet + self._assignee: Attribute[NamedUser] = NotSet + self._assigner: Attribute[NamedUser] = NotSet + self._author_association: Attribute[dict[str, Any]] = NotSet self._commit_id: Attribute[str] = NotSet self._commit_url: Attribute[str] = NotSet self._created_at: Attribute[datetime] = NotSet self._dismissed_review: Attribute[dict] = NotSet self._event: Attribute[str] = NotSet self._id: Attribute[int] = NotSet - self._issue: Attribute[github.Issue.Issue] = NotSet - self._label: Attribute[github.Label.Label] = NotSet + self._issue: Attribute[Issue] = NotSet + self._label: Attribute[Label] = NotSet self._lock_reason: Attribute[str] = NotSet - self._milestone: Attribute[github.Milestone.Milestone] = NotSet + self._milestone: Attribute[Milestone] = NotSet self._node_id: Attribute[str] = NotSet + self._performed_via_github_app: Attribute[GithubApp] = NotSet + self._project_card: Attribute[dict[str, Any]] = NotSet self._rename: Attribute[dict] = NotSet - self._requested_reviewer: Attribute[github.NamedUser.NamedUser] = NotSet - self._review_requester: Attribute[github.NamedUser.NamedUser] = NotSet + self._requested_reviewer: Attribute[NamedUser] = NotSet + self._requested_team: Attribute[Team] = NotSet + self._review_requester: Attribute[NamedUser] = NotSet self._url: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"id": self._id.value}) @property - def actor(self) -> github.NamedUser.NamedUser: + def actor(self) -> NamedUser: self._completeIfNotSet(self._actor) return self._actor.value @property - def assignee(self) -> github.NamedUser.NamedUser: + def assignee(self) -> NamedUser: self._completeIfNotSet(self._assignee) return self._assignee.value @property - def assigner(self) -> github.NamedUser.NamedUser: + def assigner(self) -> NamedUser: self._completeIfNotSet(self._assigner) return self._assigner.value + @property + def author_association(self) -> dict[str, Any]: + self._completeIfNotSet(self._author_association) + return self._author_association.value + @property def commit_id(self) -> str: self._completeIfNotSet(self._commit_id) @@ -134,12 +153,12 @@ def id(self) -> int: return self._id.value @property - def issue(self) -> github.Issue.Issue: + def issue(self) -> Issue: self._completeIfNotSet(self._issue) return self._issue.value @property - def label(self) -> github.Label.Label: + def label(self) -> Label: self._completeIfNotSet(self._label) return self._label.value @@ -149,7 +168,7 @@ def lock_reason(self) -> str: return self._lock_reason.value @property - def milestone(self) -> github.Milestone.Milestone: + def milestone(self) -> Milestone: self._completeIfNotSet(self._milestone) return self._milestone.value @@ -158,18 +177,33 @@ def node_id(self) -> str: self._completeIfNotSet(self._node_id) return self._node_id.value + @property + def performed_via_github_app(self) -> GithubApp: + self._completeIfNotSet(self._performed_via_github_app) + return self._performed_via_github_app.value + + @property + def project_card(self) -> dict[str, Any]: + self._completeIfNotSet(self._project_card) + return self._project_card.value + @property def rename(self) -> dict: self._completeIfNotSet(self._rename) return self._rename.value @property - def requested_reviewer(self) -> github.NamedUser.NamedUser: + def requested_reviewer(self) -> NamedUser: self._completeIfNotSet(self._requested_reviewer) return self._requested_reviewer.value @property - def review_requester(self) -> github.NamedUser.NamedUser: + def requested_team(self) -> Team: + self._completeIfNotSet(self._requested_team) + return self._requested_team.value + + @property + def review_requester(self) -> NamedUser: self._completeIfNotSet(self._review_requester) return self._review_requester.value @@ -185,6 +219,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._assignee = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["assignee"]) if "assigner" in attributes: # pragma no branch self._assigner = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["assigner"]) + if "author_association" in attributes: # pragma no branch + self._author_association = self._makeDictAttribute(attributes["author_association"]) if "commit_id" in attributes: # pragma no branch self._commit_id = self._makeStringAttribute(attributes["commit_id"]) if "commit_url" in attributes: # pragma no branch @@ -207,12 +243,20 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._milestone = self._makeClassAttribute(github.Milestone.Milestone, attributes["milestone"]) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) + if "performed_via_github_app" in attributes: # pragma no branch + self._performed_via_github_app = self._makeClassAttribute( + github.GithubApp.GithubApp, attributes["performed_via_github_app"] + ) + if "project_card" in attributes: # pragma no branch + self._project_card = self._makeDictAttribute(attributes["project_card"]) if "rename" in attributes: # pragma no branch self._rename = self._makeDictAttribute(attributes["rename"]) if "requested_reviewer" in attributes: # pragma no branch self._requested_reviewer = self._makeClassAttribute( github.NamedUser.NamedUser, attributes["requested_reviewer"] ) + if "requested_team" in attributes: # pragma no branch + self._requested_team = self._makeClassAttribute(github.Team.Team, attributes["requested_team"]) if "review_requester" in attributes: # pragma no branch self._review_requester = self._makeClassAttribute( github.NamedUser.NamedUser, attributes["review_requester"] diff --git a/tests/IssueEvent.py b/tests/IssueEvent.py index fe51cafbbc..7ca7e547bc 100644 --- a/tests/IssueEvent.py +++ b/tests/IssueEvent.py @@ -35,6 +35,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timezone from . import Framework @@ -99,9 +101,13 @@ def testEvent_subscribed_Attributes(self): self.assertEqual(self.event_subscribed.label, None) self.assertEqual(self.event_subscribed.assignee, None) self.assertEqual(self.event_subscribed.assigner, None) + self.assertEqual(self.event_subscribed.author_association, None) self.assertEqual(self.event_subscribed.review_requester, None) self.assertEqual(self.event_subscribed.requested_reviewer, None) + self.assertEqual(self.event_subscribed.requested_team, None) self.assertEqual(self.event_subscribed.milestone, None) + self.assertEqual(self.event_subscribed.performed_via_github_app, None) + self.assertEqual(self.event_subscribed.project_card, None) self.assertEqual(self.event_subscribed.rename, None) self.assertEqual(self.event_subscribed.dismissed_review, None) self.assertEqual(self.event_subscribed.lock_reason, None) @@ -126,9 +132,13 @@ def testEvent_assigned_Attributes(self): self.assertEqual(self.event_assigned.label, None) self.assertEqual(self.event_assigned.assignee.login, "jacquev6") self.assertEqual(self.event_assigned.assigner.login, "ghost") + self.assertEqual(self.event_assigned.author_association, None) self.assertEqual(self.event_assigned.review_requester, None) self.assertEqual(self.event_assigned.requested_reviewer, None) + self.assertEqual(self.event_assigned.requested_team, None) self.assertEqual(self.event_assigned.milestone, None) + self.assertEqual(self.event_assigned.performed_via_github_app, None) + self.assertEqual(self.event_assigned.project_card, None) self.assertEqual(self.event_assigned.rename, None) self.assertEqual(self.event_assigned.dismissed_review, None) self.assertEqual(self.event_assigned.lock_reason, None) @@ -156,9 +166,13 @@ def testEvent_referenced_Attributes(self): self.assertEqual(self.event_referenced.label, None) self.assertEqual(self.event_referenced.assignee, None) self.assertEqual(self.event_referenced.assigner, None) + self.assertEqual(self.event_referenced.author_association, None) self.assertEqual(self.event_referenced.review_requester, None) self.assertEqual(self.event_referenced.requested_reviewer, None) + self.assertEqual(self.event_referenced.requested_team, None) self.assertEqual(self.event_referenced.milestone, None) + self.assertEqual(self.event_referenced.performed_via_github_app, None) + self.assertEqual(self.event_referenced.project_card, None) self.assertEqual(self.event_referenced.rename, None) self.assertEqual(self.event_referenced.dismissed_review, None) self.assertEqual(self.event_referenced.lock_reason, None) @@ -183,9 +197,13 @@ def testEvent_closed_Attributes(self): self.assertEqual(self.event_closed.label, None) self.assertEqual(self.event_closed.assignee, None) self.assertEqual(self.event_closed.assigner, None) + self.assertEqual(self.event_closed.author_association, None) self.assertEqual(self.event_closed.review_requester, None) self.assertEqual(self.event_closed.requested_reviewer, None) + self.assertEqual(self.event_closed.requested_team, None) self.assertEqual(self.event_closed.milestone, None) + self.assertEqual(self.event_closed.performed_via_github_app, None) + self.assertEqual(self.event_closed.project_card, None) self.assertEqual(self.event_closed.rename, None) self.assertEqual(self.event_closed.dismissed_review, None) self.assertEqual(self.event_closed.lock_reason, None) @@ -210,9 +228,13 @@ def testEvent_labeled_Attributes(self): self.assertEqual(self.event_labeled.label.name, "v1") self.assertEqual(self.event_labeled.assignee, None) self.assertEqual(self.event_labeled.assigner, None) + self.assertEqual(self.event_labeled.author_association, None) self.assertEqual(self.event_labeled.review_requester, None) self.assertEqual(self.event_labeled.requested_reviewer, None) + self.assertEqual(self.event_labeled.requested_team, None) self.assertEqual(self.event_labeled.milestone, None) + self.assertEqual(self.event_labeled.performed_via_github_app, None) + self.assertEqual(self.event_labeled.project_card, None) self.assertEqual(self.event_labeled.rename, None) self.assertEqual(self.event_labeled.dismissed_review, None) self.assertEqual(self.event_labeled.lock_reason, None) @@ -237,9 +259,13 @@ def testEvent_mentioned_Attributes(self): self.assertEqual(self.event_mentioned.label, None) self.assertEqual(self.event_mentioned.assignee, None) self.assertEqual(self.event_mentioned.assigner, None) + self.assertEqual(self.event_mentioned.author_association, None) self.assertEqual(self.event_mentioned.review_requester, None) self.assertEqual(self.event_mentioned.requested_reviewer, None) + self.assertEqual(self.event_mentioned.requested_team, None) self.assertEqual(self.event_mentioned.milestone, None) + self.assertEqual(self.event_mentioned.performed_via_github_app, None) + self.assertEqual(self.event_mentioned.project_card, None) self.assertEqual(self.event_mentioned.rename, None) self.assertEqual(self.event_mentioned.dismissed_review, None) self.assertEqual(self.event_mentioned.lock_reason, None) @@ -267,9 +293,13 @@ def testEvent_merged_Attributes(self): self.assertEqual(self.event_merged.label, None) self.assertEqual(self.event_merged.assignee, None) self.assertEqual(self.event_merged.assigner, None) + self.assertEqual(self.event_merged.author_association, None) self.assertEqual(self.event_merged.review_requester, None) self.assertEqual(self.event_merged.requested_reviewer, None) + self.assertEqual(self.event_merged.requested_team, None) self.assertEqual(self.event_merged.milestone, None) + self.assertEqual(self.event_merged.performed_via_github_app, None) + self.assertEqual(self.event_merged.project_card, None) self.assertEqual(self.event_merged.rename, None) self.assertEqual(self.event_merged.dismissed_review, None) self.assertEqual(self.event_merged.lock_reason, None) @@ -297,9 +327,13 @@ def testEvent_review_requested_Attributes(self): self.assertEqual(self.event_review_requested.label, None) self.assertEqual(self.event_review_requested.assignee, None) self.assertEqual(self.event_review_requested.assigner, None) + self.assertEqual(self.event_review_requested.author_association, None) self.assertEqual(self.event_review_requested.review_requester.login, "jzelinskie") self.assertEqual(self.event_review_requested.requested_reviewer.login, "jzelinskie") + self.assertEqual(self.event_review_requested.requested_team, None) self.assertEqual(self.event_review_requested.milestone, None) + self.assertEqual(self.event_review_requested.performed_via_github_app, None) + self.assertEqual(self.event_review_requested.project_card, None) self.assertEqual(self.event_review_requested.rename, None) self.assertEqual(self.event_review_requested.dismissed_review, None) self.assertEqual(self.event_review_requested.lock_reason, None) @@ -324,9 +358,13 @@ def testEvent_reopened_Attributes(self): self.assertEqual(self.event_reopened.label, None) self.assertEqual(self.event_reopened.assignee, None) self.assertEqual(self.event_reopened.assigner, None) + self.assertEqual(self.event_reopened.author_association, None) self.assertEqual(self.event_reopened.review_requester, None) self.assertEqual(self.event_reopened.requested_reviewer, None) + self.assertEqual(self.event_reopened.requested_team, None) self.assertEqual(self.event_reopened.milestone, None) + self.assertEqual(self.event_reopened.performed_via_github_app, None) + self.assertEqual(self.event_reopened.project_card, None) self.assertEqual(self.event_reopened.rename, None) self.assertEqual(self.event_reopened.dismissed_review, None) self.assertEqual(self.event_reopened.lock_reason, None) @@ -349,11 +387,15 @@ def testEvent_unassigned_Attributes(self): self.assertEqual(self.event_unassigned.node_id, "MDE1OlVuYXNzaWduZWRFdmVudDE3ODI0NjMzNzk=") self.assertEqual(self.event_unassigned.commit_url, None) self.assertEqual(self.event_unassigned.label, None) - self.assertEqual(self.event_unassigned.actor.login, "sfdye") - self.assertEqual(self.event_unassigned.actor.login, "sfdye") + self.assertEqual(self.event_unassigned.assignee.login, "sfdye") + self.assertEqual(self.event_unassigned.assigner.login, "sfdye") + self.assertEqual(self.event_unassigned.author_association, None) self.assertEqual(self.event_unassigned.review_requester, None) self.assertEqual(self.event_unassigned.requested_reviewer, None) + self.assertEqual(self.event_unassigned.requested_team, None) self.assertEqual(self.event_unassigned.milestone, None) + self.assertEqual(self.event_unassigned.performed_via_github_app, None) + self.assertEqual(self.event_unassigned.project_card, None) self.assertEqual(self.event_unassigned.rename, None) self.assertEqual(self.event_unassigned.dismissed_review, None) self.assertEqual(self.event_unassigned.lock_reason, None) @@ -378,9 +420,13 @@ def testEvent_unlabeled_Attributes(self): self.assertEqual(self.event_unlabeled.label.name, "improvement") self.assertEqual(self.event_unlabeled.assignee, None) self.assertEqual(self.event_unlabeled.assigner, None) + self.assertEqual(self.event_unlabeled.author_association, None) self.assertEqual(self.event_unlabeled.review_requester, None) self.assertEqual(self.event_unlabeled.requested_reviewer, None) + self.assertEqual(self.event_unlabeled.requested_team, None) self.assertEqual(self.event_unlabeled.milestone, None) + self.assertEqual(self.event_unlabeled.performed_via_github_app, None) + self.assertEqual(self.event_unlabeled.project_card, None) self.assertEqual(self.event_unlabeled.rename, None) self.assertEqual(self.event_unlabeled.dismissed_review, None) self.assertEqual(self.event_unlabeled.lock_reason, None) @@ -405,9 +451,13 @@ def testEvent_renamed_Attributes(self): self.assertEqual(self.event_renamed.label, None) self.assertEqual(self.event_renamed.assignee, None) self.assertEqual(self.event_renamed.assigner, None) + self.assertEqual(self.event_renamed.author_association, None) self.assertEqual(self.event_renamed.review_requester, None) self.assertEqual(self.event_renamed.requested_reviewer, None) + self.assertEqual(self.event_renamed.requested_team, None) self.assertEqual(self.event_renamed.milestone, None) + self.assertEqual(self.event_renamed.performed_via_github_app, None) + self.assertEqual(self.event_renamed.project_card, None) self.assertEqual( self.event_renamed.rename, { @@ -441,10 +491,14 @@ def testEvent_base_ref_changed_Attributes(self): self.assertEqual(self.event_base_ref_changed.label, None) self.assertEqual(self.event_base_ref_changed.assignee, None) self.assertEqual(self.event_base_ref_changed.assigner, None) + self.assertEqual(self.event_base_ref_changed.author_association, None) self.assertEqual(self.event_base_ref_changed.review_requester, None) self.assertEqual(self.event_base_ref_changed.requested_reviewer, None) + self.assertEqual(self.event_base_ref_changed.requested_team, None) self.assertEqual(self.event_base_ref_changed.milestone, None) - self.assertEqual(self.event_head_ref_deleted.rename, None) + self.assertEqual(self.event_base_ref_changed.performed_via_github_app, None) + self.assertEqual(self.event_base_ref_changed.project_card, None) + self.assertEqual(self.event_base_ref_changed.rename, None) self.assertEqual(self.event_base_ref_changed.dismissed_review, None) self.assertEqual(self.event_base_ref_changed.lock_reason, None) self.assertEqual(repr(self.event_base_ref_changed), "IssueEvent(id=1782915693)") @@ -471,9 +525,13 @@ def testEvent_head_ref_deleted_Attributes(self): self.assertEqual(self.event_head_ref_deleted.label, None) self.assertEqual(self.event_head_ref_deleted.assignee, None) self.assertEqual(self.event_head_ref_deleted.assigner, None) + self.assertEqual(self.event_head_ref_deleted.author_association, None) self.assertEqual(self.event_head_ref_deleted.review_requester, None) self.assertEqual(self.event_head_ref_deleted.requested_reviewer, None) + self.assertEqual(self.event_head_ref_deleted.requested_team, None) self.assertEqual(self.event_head_ref_deleted.milestone, None) + self.assertEqual(self.event_head_ref_deleted.performed_via_github_app, None) + self.assertEqual(self.event_head_ref_deleted.project_card, None) self.assertEqual(self.event_head_ref_deleted.rename, None) self.assertEqual(self.event_head_ref_deleted.dismissed_review, None) self.assertEqual(self.event_head_ref_deleted.lock_reason, None) @@ -501,12 +559,16 @@ def testEvent_head_ref_restored_Attributes(self): self.assertEqual(self.event_head_ref_restored.label, None) self.assertEqual(self.event_head_ref_restored.assignee, None) self.assertEqual(self.event_head_ref_restored.assigner, None) + self.assertEqual(self.event_head_ref_restored.author_association, None) self.assertEqual(self.event_head_ref_restored.review_requester, None) self.assertEqual(self.event_head_ref_restored.requested_reviewer, None) + self.assertEqual(self.event_head_ref_restored.requested_team, None) self.assertEqual(self.event_head_ref_restored.milestone, None) - self.assertEqual(self.event_head_ref_deleted.rename, None) + self.assertEqual(self.event_head_ref_restored.performed_via_github_app, None) + self.assertEqual(self.event_head_ref_restored.project_card, None) + self.assertEqual(self.event_head_ref_restored.rename, None) self.assertEqual(self.event_head_ref_restored.dismissed_review, None) - self.assertEqual(self.event_head_ref_deleted.lock_reason, None) + self.assertEqual(self.event_head_ref_restored.lock_reason, None) self.assertEqual(repr(self.event_head_ref_restored), "IssueEvent(id=1782917299)") def testEvent_milestoned_Attributes(self): @@ -528,9 +590,13 @@ def testEvent_milestoned_Attributes(self): self.assertEqual(self.event_milestoned.label, None) self.assertEqual(self.event_milestoned.assignee, None) self.assertEqual(self.event_milestoned.assigner, None) + self.assertEqual(self.event_milestoned.author_association, None) self.assertEqual(self.event_milestoned.review_requester, None) self.assertEqual(self.event_milestoned.requested_reviewer, None) + self.assertEqual(self.event_milestoned.requested_team, None) self.assertEqual(self.event_milestoned.milestone.title, "Version 1.25.0") + self.assertEqual(self.event_milestoned.performed_via_github_app, None) + self.assertEqual(self.event_milestoned.project_card, None) self.assertEqual(self.event_milestoned.rename, None) self.assertEqual(self.event_milestoned.dismissed_review, None) self.assertEqual(self.event_milestoned.lock_reason, None) @@ -558,16 +624,20 @@ def testEvent_demilestoned_Attributes(self): self.assertEqual(self.event_demilestoned.label, None) self.assertEqual(self.event_demilestoned.assignee, None) self.assertEqual(self.event_demilestoned.assigner, None) + self.assertEqual(self.event_demilestoned.author_association, None) self.assertEqual(self.event_demilestoned.review_requester, None) self.assertEqual(self.event_demilestoned.requested_reviewer, None) + self.assertEqual(self.event_demilestoned.requested_team, None) self.assertEqual(self.event_demilestoned.milestone.title, "Version 1.25.0") + self.assertEqual(self.event_demilestoned.performed_via_github_app, None) + self.assertEqual(self.event_demilestoned.project_card, None) self.assertEqual(self.event_demilestoned.rename, None) self.assertEqual(self.event_demilestoned.dismissed_review, None) self.assertEqual(self.event_demilestoned.lock_reason, None) self.assertEqual(repr(self.event_demilestoned), "IssueEvent(id=1783596452)") def testEvent_locked_Attributes(self): - self.assertEqual(self.event_locked.actor.login, "PyGithub") + self.assertEqual(self.event_locked.actor.login, "sfdye") self.assertEqual(self.event_locked.commit_id, None) self.assertEqual( self.event_locked.created_at, @@ -585,16 +655,20 @@ def testEvent_locked_Attributes(self): self.assertEqual(self.event_locked.label, None) self.assertEqual(self.event_locked.assignee, None) self.assertEqual(self.event_locked.assigner, None) + self.assertEqual(self.event_locked.author_association, None) self.assertEqual(self.event_locked.review_requester, None) self.assertEqual(self.event_locked.requested_reviewer, None) + self.assertEqual(self.event_locked.requested_team, None) self.assertEqual(self.event_locked.milestone, None) + self.assertEqual(self.event_locked.performed_via_github_app, None) + self.assertEqual(self.event_locked.project_card, None) self.assertEqual(self.event_locked.rename, None) self.assertEqual(self.event_locked.dismissed_review, None) self.assertEqual(self.event_locked.lock_reason, "too heated") self.assertEqual(repr(self.event_locked), "IssueEvent(id=1783596743)") def testEvent_unlocked_Attributes(self): - self.assertEqual(self.event_unlocked.actor.login, "PyGithub") + self.assertEqual(self.event_unlocked.actor.login, "sfdye") self.assertEqual(self.event_unlocked.commit_id, None) self.assertEqual( self.event_unlocked.created_at, @@ -612,9 +686,13 @@ def testEvent_unlocked_Attributes(self): self.assertEqual(self.event_unlocked.label, None) self.assertEqual(self.event_unlocked.assignee, None) self.assertEqual(self.event_unlocked.assigner, None) + self.assertEqual(self.event_unlocked.author_association, None) self.assertEqual(self.event_unlocked.review_requester, None) self.assertEqual(self.event_unlocked.requested_reviewer, None) + self.assertEqual(self.event_unlocked.requested_team, None) self.assertEqual(self.event_unlocked.milestone, None) + self.assertEqual(self.event_unlocked.performed_via_github_app, None) + self.assertEqual(self.event_unlocked.project_card, None) self.assertEqual(self.event_unlocked.rename, None) self.assertEqual(self.event_unlocked.dismissed_review, None) self.assertEqual(self.event_unlocked.lock_reason, None) @@ -642,9 +720,13 @@ def testEvent_review_dismissed_Attributes(self): self.assertEqual(self.event_review_dismissed.label, None) self.assertEqual(self.event_review_dismissed.assignee, None) self.assertEqual(self.event_review_dismissed.assigner, None) + self.assertEqual(self.event_review_dismissed.author_association, None) self.assertEqual(self.event_review_dismissed.review_requester, None) self.assertEqual(self.event_review_dismissed.requested_reviewer, None) + self.assertEqual(self.event_review_dismissed.requested_team, None) self.assertEqual(self.event_review_dismissed.milestone, None) + self.assertEqual(self.event_review_dismissed.performed_via_github_app, None) + self.assertEqual(self.event_review_dismissed.project_card, None) self.assertEqual(self.event_review_dismissed.rename, None) self.assertEqual( self.event_review_dismissed.dismissed_review, @@ -679,9 +761,13 @@ def testEvent_review_request_removed_Attributes(self): self.assertEqual(self.event_review_request_removed.label, None) self.assertEqual(self.event_review_request_removed.assignee, None) self.assertEqual(self.event_review_request_removed.assigner, None) + self.assertEqual(self.event_review_request_removed.author_association, None) self.assertEqual(self.event_review_request_removed.review_requester.login, "sfdye") self.assertEqual(self.event_review_request_removed.requested_reviewer.login, "jasonwhite") + self.assertEqual(self.event_review_request_removed.requested_team, None) self.assertEqual(self.event_review_request_removed.milestone, None) + self.assertEqual(self.event_review_request_removed.performed_via_github_app, None) + self.assertEqual(self.event_review_request_removed.project_card, None) self.assertEqual(self.event_review_request_removed.rename, None) self.assertEqual(self.event_review_request_removed.dismissed_review, None) self.assertEqual(self.event_review_request_removed.lock_reason, None) @@ -709,9 +795,13 @@ def testEvent_marked_as_duplicate_Attributes(self): self.assertEqual(self.event_marked_as_duplicate.label, None) self.assertEqual(self.event_marked_as_duplicate.assignee, None) self.assertEqual(self.event_marked_as_duplicate.assigner, None) + self.assertEqual(self.event_marked_as_duplicate.author_association, None) self.assertEqual(self.event_marked_as_duplicate.review_requester, None) self.assertEqual(self.event_marked_as_duplicate.requested_reviewer, None) + self.assertEqual(self.event_marked_as_duplicate.requested_team, None) self.assertEqual(self.event_marked_as_duplicate.milestone, None) + self.assertEqual(self.event_marked_as_duplicate.performed_via_github_app, None) + self.assertEqual(self.event_marked_as_duplicate.project_card, None) self.assertEqual(self.event_marked_as_duplicate.rename, None) self.assertEqual(self.event_marked_as_duplicate.dismissed_review, None) self.assertEqual(self.event_marked_as_duplicate.lock_reason, None) @@ -739,9 +829,13 @@ def testEvent_unmarked_as_duplicate_Attributes(self): self.assertEqual(self.event_unmarked_as_duplicate.label, None) self.assertEqual(self.event_unmarked_as_duplicate.assignee, None) self.assertEqual(self.event_unmarked_as_duplicate.assigner, None) + self.assertEqual(self.event_unmarked_as_duplicate.author_association, None) self.assertEqual(self.event_unmarked_as_duplicate.review_requester, None) self.assertEqual(self.event_unmarked_as_duplicate.requested_reviewer, None) + self.assertEqual(self.event_unmarked_as_duplicate.requested_team, None) self.assertEqual(self.event_unmarked_as_duplicate.milestone, None) + self.assertEqual(self.event_unmarked_as_duplicate.performed_via_github_app, None) + self.assertEqual(self.event_unmarked_as_duplicate.project_card, None) self.assertEqual(self.event_unmarked_as_duplicate.rename, None) self.assertEqual(self.event_unmarked_as_duplicate.dismissed_review, None) self.assertEqual(self.event_unmarked_as_duplicate.lock_reason, None) @@ -769,9 +863,22 @@ def testEvent_added_to_project_Attributes(self): self.assertEqual(self.event_added_to_project.label, None) self.assertEqual(self.event_added_to_project.assignee, None) self.assertEqual(self.event_added_to_project.assigner, None) + self.assertEqual(self.event_added_to_project.author_association, None) self.assertEqual(self.event_added_to_project.review_requester, None) self.assertEqual(self.event_added_to_project.requested_reviewer, None) + self.assertEqual(self.event_added_to_project.requested_team, None) self.assertEqual(self.event_added_to_project.milestone, None) + self.assertEqual(self.event_added_to_project.performed_via_github_app, None) + self.assertEqual( + self.event_added_to_project.project_card, + { + "column_name": "To do", + "id": 12179888, + "project_id": 1714960, + "project_url": "https://api.github.com/projects/1714960", + "url": "https://api.github.com/projects/columns/cards/12179888", + }, + ) self.assertEqual(self.event_added_to_project.rename, None) self.assertEqual(self.event_added_to_project.dismissed_review, None) self.assertEqual(self.event_added_to_project.lock_reason, None) @@ -799,9 +906,23 @@ def testEvent_moved_columns_in_project_Attributes(self): self.assertEqual(self.event_moved_columns_in_project.label, None) self.assertEqual(self.event_moved_columns_in_project.assignee, None) self.assertEqual(self.event_moved_columns_in_project.assigner, None) + self.assertEqual(self.event_moved_columns_in_project.author_association, None) self.assertEqual(self.event_moved_columns_in_project.review_requester, None) self.assertEqual(self.event_moved_columns_in_project.requested_reviewer, None) + self.assertEqual(self.event_moved_columns_in_project.requested_team, None) self.assertEqual(self.event_moved_columns_in_project.milestone, None) + self.assertEqual(self.event_moved_columns_in_project.performed_via_github_app, None) + self.assertEqual( + self.event_moved_columns_in_project.project_card, + { + "column_name": "In progress", + "id": 12179888, + "previous_column_name": "To do", + "project_id": 1714960, + "project_url": "https://api.github.com/projects/1714960", + "url": "https://api.github.com/projects/columns/cards/12179888", + }, + ) self.assertEqual(self.event_moved_columns_in_project.rename, None) self.assertEqual(self.event_moved_columns_in_project.dismissed_review, None) self.assertEqual(self.event_moved_columns_in_project.lock_reason, None) @@ -829,9 +950,22 @@ def testEvent_removed_from_project_Attributes(self): self.assertEqual(self.event_removed_from_project.label, None) self.assertEqual(self.event_removed_from_project.assignee, None) self.assertEqual(self.event_removed_from_project.assigner, None) + self.assertEqual(self.event_removed_from_project.author_association, None) self.assertEqual(self.event_removed_from_project.review_requester, None) self.assertEqual(self.event_removed_from_project.requested_reviewer, None) + self.assertEqual(self.event_removed_from_project.requested_team, None) self.assertEqual(self.event_removed_from_project.milestone, None) + self.assertEqual(self.event_removed_from_project.performed_via_github_app, None) + self.assertEqual( + self.event_removed_from_project.project_card, + { + "column_name": "In progress", + "id": 12179888, + "project_id": 1714960, + "project_url": "https://api.github.com/projects/1714960", + "url": "https://api.github.com/projects/columns/cards/12179888", + }, + ) self.assertEqual(self.event_removed_from_project.rename, None) self.assertEqual(self.event_removed_from_project.dismissed_review, None) self.assertEqual(self.event_removed_from_project.lock_reason, None) @@ -859,9 +993,22 @@ def testEvent_converted_note_to_issue_Attributes(self): self.assertEqual(self.event_converted_note_to_issue.label, None) self.assertEqual(self.event_converted_note_to_issue.assignee, None) self.assertEqual(self.event_converted_note_to_issue.assigner, None) + self.assertEqual(self.event_converted_note_to_issue.author_association, None) self.assertEqual(self.event_converted_note_to_issue.review_requester, None) self.assertEqual(self.event_converted_note_to_issue.requested_reviewer, None) + self.assertEqual(self.event_converted_note_to_issue.requested_team, None) self.assertEqual(self.event_converted_note_to_issue.milestone, None) + self.assertEqual(self.event_converted_note_to_issue.performed_via_github_app, None) + self.assertEqual( + self.event_converted_note_to_issue.project_card, + { + "column_name": "To do", + "id": 12179901, + "project_id": 1714960, + "project_url": "https://api.github.com/projects/1714960", + "url": "https://api.github.com/projects/columns/cards/12179901", + }, + ) self.assertEqual(self.event_converted_note_to_issue.rename, None) self.assertEqual(self.event_converted_note_to_issue.dismissed_review, None) self.assertEqual(self.event_converted_note_to_issue.lock_reason, None) diff --git a/tests/ReplayData/IssueEvent.setUp.txt b/tests/ReplayData/IssueEvent.setUp.txt index 9c66c5a17d..38cf7d08ff 100644 --- a/tests/ReplayData/IssueEvent.setUp.txt +++ b/tests/ReplayData/IssueEvent.setUp.txt @@ -6,8 +6,8 @@ None {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Sun, 01 Oct 2023 16:12:59 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/"cdca3f0b8668559db670a6a3af80084c9166d3fc865d92056cf00cf5354e5b7e"'), ('Last-Modified', 'Sun, 01 Oct 2023 14:43:38 GMT'), ('github-authentication-token-expiration', '2023-10-31 17:03:31 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1696180375'), ('X-RateLimit-Used', '9'), ('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', '9D02:B9E1:3D90813:3E508C2:65199A8B')] -{"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":"2023-10-01T14:43:38Z","pushed_at":"2023-10-01T15:45:33Z","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":13884,"stargazers_count":6285,"watchers_count":6285,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1675,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":259,"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":1675,"open_issues":259,"watchers":6285,"default_branch":"main","permissions":{"admin":false,"maintain":false,"push":true,"triage":true,"pull":true},"organization":{"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},"network_count":1675,"subscribers_count":111} +[('Date', 'Fri, 03 Jan 2025 20:25:39 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"f5cc8602b1810af03dbb6c6362f001a1e6360ddab7e5169b030d5cb0e172da51"'), ('Last-Modified', 'Fri, 03 Jan 2025 18:50:01 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4993'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '7'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A552:236110:2293684D:23749C1A:677847C3')] +{"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","user_view_type":"public","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":"2025-01-03T18:50:01Z","pushed_at":"2024-12-19T12:01:11Z","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":16425,"stargazers_count":7117,"watchers_count":7117,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1793,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":356,"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":1793,"open_issues":356,"watchers":7117,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":false,"allow_rebase_merge":false,"allow_auto_merge":false,"delete_branch_on_merge":true,"allow_update_branch":true,"use_squash_pr_title_as_default":true,"squash_merge_commit_message":"PR_BODY","squash_merge_commit_title":"PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","custom_properties":{},"organization":{"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","user_view_type":"public","site_admin":false},"security_and_analysis":{"secret_scanning":{"status":"disabled"},"secret_scanning_push_protection":{"status":"disabled"},"dependabot_security_updates":{"status":"enabled"},"secret_scanning_non_provider_patterns":{"status":"disabled"},"secret_scanning_validity_checks":{"status":"disabled"}},"network_count":1793,"subscribers_count":111} https GET @@ -17,8 +17,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:38 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4910'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"0b8e48d6ed32221ad893c6e41d2bd101"'), ('Last-Modified', 'Sat, 28 Jul 2018 06:09:54 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.082385'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'E2DE:0ABD:74A67B:100F04B:5B7F1A22')] -{"id":16347479,"node_id":"MDE1OlN1YnNjcmliZWRFdmVudDE2MzQ3NDc5","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/16347479","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"event":"subscribed","commit_id":null,"commit_url":null,"created_at":"2012-05-27T05:40:15Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:39 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"6d47a3e49e7716fe14c0cf85050a3d25e25f9e75ab098bec7d7111963f4b3ba4"'), ('Last-Modified', 'Sun, 20 Oct 2024 07:14:52 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4992'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '8'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A55C:667D7:21D54A66:22B98E2D:677847C3')] +{"id":16347479,"node_id":"MDE1OlN1YnNjcmliZWRFdmVudDE2MzQ3NDc5","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/16347479","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"event":"subscribed","commit_id":null,"commit_url":null,"created_at":"2012-05-27T05:40:15Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true,"description":null}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/timeline","performed_via_github_app":null,"state_reason":"completed"},"performed_via_github_app":null} https GET @@ -28,8 +28,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:39 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4909'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"b49e5770e32be97b98af784190ebb7c6"'), ('Last-Modified', 'Sat, 28 Jul 2018 06:09:54 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.066192'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'E974:0ABA:314FC3:7C9DAF:5B7F1A23')] -{"id":16347480,"node_id":"MDEzOkFzc2lnbmVkRXZlbnQxNjM0NzQ4MA==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/16347480","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"event":"assigned","commit_id":null,"commit_url":null,"created_at":"2012-05-27T05:40:15Z","assignee":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"assigner":{"login":"ghost","id":10137,"node_id":"MDQ6VXNlcjEwMTM3","avatar_url":"https://avatars3.githubusercontent.com/u/10137?v=4","gravatar_id":"","url":"https://api.github.com/users/ghost","html_url":"https://github.com/ghost","followers_url":"https://api.github.com/users/ghost/followers","following_url":"https://api.github.com/users/ghost/following{/other_user}","gists_url":"https://api.github.com/users/ghost/gists{/gist_id}","starred_url":"https://api.github.com/users/ghost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ghost/subscriptions","organizations_url":"https://api.github.com/users/ghost/orgs","repos_url":"https://api.github.com/users/ghost/repos","events_url":"https://api.github.com/users/ghost/events{/privacy}","received_events_url":"https://api.github.com/users/ghost/received_events","type":"User","site_admin":false},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:40 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"5f13e038ccf75f45a42e528e8e6f1924a54b8a4a64a03415a8bc1137f15184e9"'), ('Last-Modified', 'Sun, 20 Oct 2024 07:14:52 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '9'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A568:5A83E:21A0381D:22847F8B:677847C3')] +{"id":16347480,"node_id":"MDEzOkFzc2lnbmVkRXZlbnQxNjM0NzQ4MA==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/16347480","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"event":"assigned","commit_id":null,"commit_url":null,"created_at":"2012-05-27T05:40:15Z","assignee":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"assigner":{"login":"ghost","id":10137,"node_id":"MDQ6VXNlcjEwMTM3","avatar_url":"https://avatars.githubusercontent.com/u/10137?v=4","gravatar_id":"","url":"https://api.github.com/users/ghost","html_url":"https://github.com/ghost","followers_url":"https://api.github.com/users/ghost/followers","following_url":"https://api.github.com/users/ghost/following{/other_user}","gists_url":"https://api.github.com/users/ghost/gists{/gist_id}","starred_url":"https://api.github.com/users/ghost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ghost/subscriptions","organizations_url":"https://api.github.com/users/ghost/orgs","repos_url":"https://api.github.com/users/ghost/repos","events_url":"https://api.github.com/users/ghost/events{/privacy}","received_events_url":"https://api.github.com/users/ghost/received_events","type":"User","user_view_type":"public","site_admin":false},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true,"description":null}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/timeline","performed_via_github_app":null,"state_reason":"completed"},"performed_via_github_app":null} https GET @@ -39,8 +39,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:40 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4908'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"6a38598525817f72ab77ad53134d9877"'), ('Last-Modified', 'Sat, 28 Jul 2018 06:09:54 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.069489'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D07A:0ABF:9FFA4C:13C4399:5B7F1A24')] -{"id":16348656,"node_id":"MDE1OlJlZmVyZW5jZWRFdmVudDE2MzQ4NjU2","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/16348656","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"event":"referenced","commit_id":"ed866fc43833802ab553e5ff8581c81bb00dd433","commit_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/ed866fc43833802ab553e5ff8581c81bb00dd433","created_at":"2012-05-27T07:29:25Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:40 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"df474a40b9935d5e20e6bb1537c615e7dc202e5653bd59f1ab867980b2b9d414"'), ('Last-Modified', 'Sun, 20 Oct 2024 07:14:52 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4990'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '10'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A578:59502:21996668:227DACE2:677847C4')] +{"id":16348656,"node_id":"MDE1OlJlZmVyZW5jZWRFdmVudDE2MzQ4NjU2","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/16348656","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"event":"referenced","commit_id":"ed866fc43833802ab553e5ff8581c81bb00dd433","commit_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/ed866fc43833802ab553e5ff8581c81bb00dd433","created_at":"2012-05-27T07:29:25Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true,"description":null}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/timeline","performed_via_github_app":null,"state_reason":"completed"},"performed_via_github_app":null} https GET @@ -50,8 +50,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4907'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"46a1f873256a94c9c559ff982097a73b"'), ('Last-Modified', 'Sat, 28 Jul 2018 06:09:54 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.080573'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D7B8:0AB9:498B57:B4A743:5B7F1A25')] -{"id":16351220,"node_id":"MDExOkNsb3NlZEV2ZW50MTYzNTEyMjA=","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/16351220","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"event":"closed","commit_id":null,"commit_url":null,"created_at":"2012-05-27T11:04:25Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:40 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"f44c263432863e961d1f4cad4a3bbaab3f3aa0a693d3910d9677a7627320d824"'), ('Last-Modified', 'Sun, 20 Oct 2024 07:14:52 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4989'), ('X-RateLimit-Reset', '1735938877'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A57A:4D504:229AD8E8:237F1EEF:677847C4')] +{"id":16351220,"node_id":"MDExOkNsb3NlZEV2ZW50MTYzNTEyMjA=","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/16351220","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"event":"closed","commit_id":null,"commit_url":null,"created_at":"2012-05-27T11:04:25Z","state_reason":null,"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true,"description":null}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/timeline","performed_via_github_app":null,"state_reason":"completed"},"performed_via_github_app":null} https GET @@ -61,8 +61,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4906'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"3750cdca0e968e35755c6dea9afbd00b"'), ('Last-Modified', 'Sat, 28 Jul 2018 06:09:54 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.064877'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'F8AA:0ABF:9FFB70:13C45B4:5B7F1A26')] -{"id":98136337,"node_id":"MDEyOkxhYmVsZWRFdmVudDk4MTM2MzM3","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/98136337","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"event":"labeled","commit_id":null,"commit_url":null,"created_at":"2014-03-02T18:55:10Z","label":{"name":"v1","color":"5319e7"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/327146?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},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:40 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"74fd7ed566384b31c4745834b097e855ae4b4a388648906b6df91547432b2527"'), ('Last-Modified', 'Sun, 20 Oct 2024 07:14:52 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4988'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '12'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A58A:521E5:22CB74A1:23AFB9A6:677847C4')] +{"id":98136337,"node_id":"MDEyOkxhYmVsZWRFdmVudDk4MTM2MzM3","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/98136337","actor":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"event":"labeled","commit_id":null,"commit_url":null,"created_at":"2014-03-02T18:55:10Z","label":{"name":"v1","color":"5319e7"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/events","html_url":"https://github.com/PyGithub/PyGithub/issues/30","id":4769659,"node_id":"MDU6SXNzdWU0NzY5NjU5","number":30,"title":"Issue also created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"labels":[{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true,"description":null}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2012-05-27T05:40:15Z","updated_at":"2014-03-02T18:55:10Z","closed_at":"2012-05-27T11:04:25Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body created by PyGithub\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/30/timeline","performed_via_github_app":null,"state_reason":"completed"},"performed_via_github_app":null} https GET @@ -72,8 +72,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:43 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4905'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"a435bc605a111d84b00833d6c4d843bf"'), ('Last-Modified', 'Thu, 16 Aug 2018 18:04:04 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.105650'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D643:0ABD:74A7E0:100F3C6:5B7F1A27')] -{"id":1009034767,"node_id":"MDE0Ok1lbnRpb25lZEV2ZW50MTAwOTAzNDc2Nw==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1009034767","actor":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","site_admin":false},"event":"mentioned","commit_id":null,"commit_url":null,"created_at":"2017-03-21T17:30:14Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/events","html_url":"https://github.com/PyGithub/PyGithub/pull/538","id":215553858,"node_id":"MDExOlB1bGxSZXF1ZXN0MTExNjQ5NzAz","number":538,"title":"Add Support for Pull Request Reviews feature","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":6,"created_at":"2017-03-20T21:00:37Z","updated_at":"2018-03-20T14:21:07Z","closed_at":"2017-03-25T16:52:49Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538","html_url":"https://github.com/PyGithub/PyGithub/pull/538","diff_url":"https://github.com/PyGithub/PyGithub/pull/538.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/538.patch"},"body":"Adding support to Pull Request class to access new Github API features [Pull Request reviews](https://developer.github.com/v3/pulls/reviews/) and [Pull Request Reviewer Requests](https://developer.github.com/v3/pulls/review_requests/)\r\n\r\nThe API's is still in beta. \r\n\r\nI approached this by providing a minimal set of routines to access the list of reviews or a specific review. Also access to get a list of Reviewer requests. \r\n\r\nBecause the API is still early in Beta, I choose not to implement the create/delete/edit features, but the infrastructure should be in place for future improvements.\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"d58d8b19dde2f53571f56d1df25bbe781ed4a39468646e53110248d9305a5a93"'), ('Last-Modified', 'Sun, 15 Dec 2024 12:22:25 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4987'), ('X-RateLimit-Reset', '1735938877'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A58E:59502:219968CA:227DAF3F:677847C5')] +{"id":1009034767,"node_id":"MDE0Ok1lbnRpb25lZEV2ZW50MTAwOTAzNDc2Nw==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1009034767","actor":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"mentioned","commit_id":null,"commit_url":null,"created_at":"2017-03-21T17:30:14Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/events","html_url":"https://github.com/PyGithub/PyGithub/pull/538","id":215553858,"node_id":"MDExOlB1bGxSZXF1ZXN0MTExNjQ5NzAz","number":538,"title":"Add Support for Pull Request Reviews feature","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":8,"created_at":"2017-03-20T21:00:37Z","updated_at":"2024-10-18T08:57:49Z","closed_at":"2017-03-25T16:52:49Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538","html_url":"https://github.com/PyGithub/PyGithub/pull/538","diff_url":"https://github.com/PyGithub/PyGithub/pull/538.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/538.patch","merged_at":"2017-03-25T16:52:49Z"},"body":"Adding support to Pull Request class to access new Github API features [Pull Request reviews](https://developer.github.com/v3/pulls/reviews/) and [Pull Request Reviewer Requests](https://developer.github.com/v3/pulls/review_requests/)\r\n\r\nThe API's is still in beta. \r\n\r\nI approached this by providing a minimal set of routines to access the list of reviews or a specific review. Also access to get a list of Reviewer requests. \r\n\r\nBecause the API is still early in Beta, I choose not to implement the create/delete/edit features, but the infrastructure should be in place for future improvements.\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -83,8 +83,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4904'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"88b242c46ba251ff63be2aff0c37664a"'), ('Last-Modified', 'Thu, 16 Aug 2018 18:04:04 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.069472'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'DB3A:0ABD:74A828:100F46D:5B7F1A28')] -{"id":1015402964,"node_id":"MDExOk1lcmdlZEV2ZW50MTAxNTQwMjk2NA==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1015402964","actor":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","site_admin":false},"event":"merged","commit_id":"2525515b094d7425f7018eb5b66171e21c5fbc10","commit_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2525515b094d7425f7018eb5b66171e21c5fbc10","created_at":"2017-03-25T16:52:49Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/events","html_url":"https://github.com/PyGithub/PyGithub/pull/538","id":215553858,"node_id":"MDExOlB1bGxSZXF1ZXN0MTExNjQ5NzAz","number":538,"title":"Add Support for Pull Request Reviews feature","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":6,"created_at":"2017-03-20T21:00:37Z","updated_at":"2018-03-20T14:21:07Z","closed_at":"2017-03-25T16:52:49Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538","html_url":"https://github.com/PyGithub/PyGithub/pull/538","diff_url":"https://github.com/PyGithub/PyGithub/pull/538.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/538.patch"},"body":"Adding support to Pull Request class to access new Github API features [Pull Request reviews](https://developer.github.com/v3/pulls/reviews/) and [Pull Request Reviewer Requests](https://developer.github.com/v3/pulls/review_requests/)\r\n\r\nThe API's is still in beta. \r\n\r\nI approached this by providing a minimal set of routines to access the list of reviews or a specific review. Also access to get a list of Reviewer requests. \r\n\r\nBecause the API is still early in Beta, I choose not to implement the create/delete/edit features, but the infrastructure should be in place for future improvements.\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"ff6778233343994d7be1669bf9689a90ff5d2444af044ed0e2969e6531ccb0d2"'), ('Last-Modified', 'Sun, 15 Dec 2024 12:22:25 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4986'), ('X-RateLimit-Reset', '1735938877'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A59A:4E297:238945A3:246D8C28:677847C5')] +{"id":1015402964,"node_id":"MDExOk1lcmdlZEV2ZW50MTAxNTQwMjk2NA==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1015402964","actor":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"merged","commit_id":"2525515b094d7425f7018eb5b66171e21c5fbc10","commit_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2525515b094d7425f7018eb5b66171e21c5fbc10","created_at":"2017-03-25T16:52:49Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/events","html_url":"https://github.com/PyGithub/PyGithub/pull/538","id":215553858,"node_id":"MDExOlB1bGxSZXF1ZXN0MTExNjQ5NzAz","number":538,"title":"Add Support for Pull Request Reviews feature","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":8,"created_at":"2017-03-20T21:00:37Z","updated_at":"2024-10-18T08:57:49Z","closed_at":"2017-03-25T16:52:49Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538","html_url":"https://github.com/PyGithub/PyGithub/pull/538","diff_url":"https://github.com/PyGithub/PyGithub/pull/538.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/538.patch","merged_at":"2017-03-25T16:52:49Z"},"body":"Adding support to Pull Request class to access new Github API features [Pull Request reviews](https://developer.github.com/v3/pulls/reviews/) and [Pull Request Reviewer Requests](https://developer.github.com/v3/pulls/review_requests/)\r\n\r\nThe API's is still in beta. \r\n\r\nI approached this by providing a minimal set of routines to access the list of reviews or a specific review. Also access to get a list of Reviewer requests. \r\n\r\nBecause the API is still early in Beta, I choose not to implement the create/delete/edit features, but the infrastructure should be in place for future improvements.\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -94,8 +94,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:45 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4903'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"ee600aa216a3442dab99a67dfe9769f6"'), ('Last-Modified', 'Thu, 16 Aug 2018 18:04:04 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.088436'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'FA81:0ABF:9FFCBB:13C4839:5B7F1A29')] -{"id":1011101309,"node_id":"MDIwOlJldmlld1JlcXVlc3RlZEV2ZW50MTAxMTEwMTMwOQ==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1011101309","actor":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","site_admin":false},"event":"review_requested","commit_id":null,"commit_url":null,"created_at":"2017-03-22T19:06:44Z","review_requester":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","site_admin":false},"requested_reviewer":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","site_admin":false},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/events","html_url":"https://github.com/PyGithub/PyGithub/pull/538","id":215553858,"node_id":"MDExOlB1bGxSZXF1ZXN0MTExNjQ5NzAz","number":538,"title":"Add Support for Pull Request Reviews feature","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":6,"created_at":"2017-03-20T21:00:37Z","updated_at":"2018-03-20T14:21:07Z","closed_at":"2017-03-25T16:52:49Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538","html_url":"https://github.com/PyGithub/PyGithub/pull/538","diff_url":"https://github.com/PyGithub/PyGithub/pull/538.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/538.patch"},"body":"Adding support to Pull Request class to access new Github API features [Pull Request reviews](https://developer.github.com/v3/pulls/reviews/) and [Pull Request Reviewer Requests](https://developer.github.com/v3/pulls/review_requests/)\r\n\r\nThe API's is still in beta. \r\n\r\nI approached this by providing a minimal set of routines to access the list of reviews or a specific review. Also access to get a list of Reviewer requests. \r\n\r\nBecause the API is still early in Beta, I choose not to implement the create/delete/edit features, but the infrastructure should be in place for future improvements.\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"67201e42d1d2d8abe6e2b4cd07fd1ae277fdc8979deb5720283125b73fa5528d"'), ('Last-Modified', 'Sun, 15 Dec 2024 12:22:25 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4985'), ('X-RateLimit-Reset', '1735938877'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A5A6:59502:21996A55:227DB0EC:677847C5')] +{"id":1011101309,"node_id":"MDIwOlJldmlld1JlcXVlc3RlZEV2ZW50MTAxMTEwMTMwOQ==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1011101309","actor":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"review_requested","commit_id":null,"commit_url":null,"created_at":"2017-03-22T19:06:44Z","review_requester":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","user_view_type":"public","site_admin":false},"requested_reviewer":{"login":"jzelinskie","id":343539,"node_id":"MDQ6VXNlcjM0MzUzOQ==","avatar_url":"https://avatars.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","user_view_type":"public","site_admin":false},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/events","html_url":"https://github.com/PyGithub/PyGithub/pull/538","id":215553858,"node_id":"MDExOlB1bGxSZXF1ZXN0MTExNjQ5NzAz","number":538,"title":"Add Support for Pull Request Reviews feature","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":8,"created_at":"2017-03-20T21:00:37Z","updated_at":"2024-10-18T08:57:49Z","closed_at":"2017-03-25T16:52:49Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538","html_url":"https://github.com/PyGithub/PyGithub/pull/538","diff_url":"https://github.com/PyGithub/PyGithub/pull/538.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/538.patch","merged_at":"2017-03-25T16:52:49Z"},"body":"Adding support to Pull Request class to access new Github API features [Pull Request reviews](https://developer.github.com/v3/pulls/reviews/) and [Pull Request Reviewer Requests](https://developer.github.com/v3/pulls/review_requests/)\r\n\r\nThe API's is still in beta. \r\n\r\nI approached this by providing a minimal set of routines to access the list of reviews or a specific review. Also access to get a list of Reviewer requests. \r\n\r\nBecause the API is still early in Beta, I choose not to implement the create/delete/edit features, but the infrastructure should be in place for future improvements.\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -105,8 +105,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:46 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4902'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"e1dc589b7165f7ab3b9a5ec1f1992257"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.100333'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'FF47:0ABF:9FFD2C:13C4905:5B7F1A2A')] -{"id":1782463023,"node_id":"MDEzOlJlb3BlbmVkRXZlbnQxNzgyNDYzMDIz","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782463023","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"reopened","commit_id":null,"commit_url":null,"created_at":"2018-08-10T13:10:09Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"d5b2ff58b4dd6cdd09efa4650d5336c08506faaead3dd26638edfc3d290cf838"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4984'), ('X-RateLimit-Reset', '1735938877'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A5A8:4DB83:214C9410:2230D97A:677847C5')] +{"id":1782463023,"node_id":"MDEzOlJlb3BlbmVkRXZlbnQxNzgyNDYzMDIz","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782463023","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"reopened","commit_id":null,"commit_url":null,"created_at":"2018-08-10T13:10:09Z","state_reason":null,"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -116,8 +116,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:47 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4901'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"81ce2153a96fa3ddc345e2b0f86f9393"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.069654'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'EDCA:0AB9:498C6B:B4A9B6:5B7F1A2B')] -{"id":1782463379,"node_id":"MDE1OlVuYXNzaWduZWRFdmVudDE3ODI0NjMzNzk=","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782463379","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"unassigned","commit_id":null,"commit_url":null,"created_at":"2018-08-10T13:10:21Z","assignee":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"assigner":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"c0ff30383b44a39c933e0a8c13f590fd684e7a0b83fc8b5979ae2ca6fc526c6e"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4983'), ('X-RateLimit-Reset', '1735938877'), ('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'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A5B6:654DF:235B30A0:243F7676:677847C6')] +{"id":1782463379,"node_id":"MDE1OlVuYXNzaWduZWRFdmVudDE3ODI0NjMzNzk=","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782463379","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"unassigned","commit_id":null,"commit_url":null,"created_at":"2018-08-10T13:10:21Z","assignee":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"assigner":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -127,8 +127,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:48 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4900'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"2128dbb310e3cc637185358d404869e1"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.115073'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'E51D:0ABD:74A924:100F6ED:5B7F1A2C')] -{"id":1782463917,"node_id":"MDE0OlVubGFiZWxlZEV2ZW50MTc4MjQ2MzkxNw==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782463917","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"unlabeled","commit_id":null,"commit_url":null,"created_at":"2018-08-10T13:10:38Z","label":{"name":"improvement","color":"f46bb7"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"24fdaab7ac69762128a26c4e0bad188c9b00fce70dfad4e9e55651c6ddedcd2d"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '18'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A5BA:1146F1:1DA1A590:1E6A92C3:677847C6')] +{"id":1782463917,"node_id":"MDE0OlVubGFiZWxlZEV2ZW50MTc4MjQ2MzkxNw==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782463917","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"unlabeled","commit_id":null,"commit_url":null,"created_at":"2018-08-10T13:10:38Z","label":{"name":"improvement","color":"f46bb7"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -138,8 +138,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:49 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4899'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"55f43f031b8936f492a7361077dd5a86"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.086051'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D67B:0ABD:74A96D:100F789:5B7F1A2D')] -{"id":1782472556,"node_id":"MDE3OlJlbmFtZWRUaXRsZUV2ZW50MTc4MjQ3MjU1Ng==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782472556","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"renamed","commit_id":null,"commit_url":null,"created_at":"2018-08-10T13:15:18Z","rename":{"from":"Adding new attributes to IssueEvent Object (DO NOT MERGE - SEE NOTES)","to":"Adding new attributes to IssueEvent"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:43 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"65593ed1fd105d2321c5699f189f3cdc41955eb254f2092b33579b840cd3b86a"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '19'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A5BE:236110:229370D3:2374A4BA:677847C6')] +{"id":1782472556,"node_id":"MDE3OlJlbmFtZWRUaXRsZUV2ZW50MTc4MjQ3MjU1Ng==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782472556","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"renamed","commit_id":null,"commit_url":null,"created_at":"2018-08-10T13:15:18Z","rename":{"from":"Adding new attributes to IssueEvent Object (DO NOT MERGE - SEE NOTES)","to":"Adding new attributes to IssueEvent"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -149,8 +149,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:50 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4898'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"d45782077b9250f01a093c6c087b8fef"'), ('Last-Modified', 'Fri, 10 Aug 2018 16:38:22 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.091391'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D36D:0ABF:9FFEFE:13C4C7D:5B7F1A2E')] -{"id":1782915693,"node_id":"MDE5OkJhc2VSZWZDaGFuZ2VkRXZlbnQxNzgyOTE1Njkz","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782915693","actor":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"event":"base_ref_changed","commit_id":null,"commit_url":null,"created_at":"2018-08-10T16:38:22Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:43 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"06cb69bbbd22a673e81ad0c2a86cf333bdc8bfdbf45794b3dde9d78dd679e3e4"'), ('Last-Modified', 'Mon, 25 Jul 2022 14:31:35 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '20'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A5CA:7CD91:22C51EF9:23A96553:677847C7')] +{"id":1782915693,"node_id":"MDE5OkJhc2VSZWZDaGFuZ2VkRXZlbnQxNzgyOTE1Njkz","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782915693","actor":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"base_ref_changed","commit_id":null,"commit_url":null,"created_at":"2018-08-10T16:38:22Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -160,8 +160,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4897'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"cea13c0d66e8242585202a08230df49b"'), ('Last-Modified', 'Fri, 10 Aug 2018 16:39:20 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.066303'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'FA38:0ABF:9FFF90:13C4DA0:5B7F1A2F')] -{"id":1782917185,"node_id":"MDE5OkhlYWRSZWZEZWxldGVkRXZlbnQxNzgyOTE3MTg1","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782917185","actor":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"event":"head_ref_deleted","commit_id":null,"commit_url":null,"created_at":"2018-08-10T16:39:20Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:43 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b14653b30577b18572b4ff4b10f1d5e50bcd88e6a40ccdc6398352f2fa214531"'), ('Last-Modified', 'Mon, 25 Jul 2022 14:31:35 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4979'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '21'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8AA:88FDE:22B3762F:2397BBD0:677847C7')] +{"id":1782917185,"node_id":"MDE5OkhlYWRSZWZEZWxldGVkRXZlbnQxNzgyOTE3MTg1","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782917185","actor":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"head_ref_deleted","commit_id":null,"commit_url":null,"created_at":"2018-08-10T16:39:20Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -171,8 +171,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:52 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4896'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"b801e04ad0112192e719aa4fb0b25ba2"'), ('Last-Modified', 'Fri, 10 Aug 2018 16:39:23 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.064855'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'E58A:0ABF:A0000B:13C4E97:5B7F1A30')] -{"id":1782917299,"node_id":"MDIwOkhlYWRSZWZSZXN0b3JlZEV2ZW50MTc4MjkxNzI5OQ==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782917299","actor":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"event":"head_ref_restored","commit_id":null,"commit_url":null,"created_at":"2018-08-10T16:39:23Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"bea36fdb854c959e456898c1ec3bf74c94e2dfe3c360e09e1b3b89eb3c4a9cd2"'), ('Last-Modified', 'Mon, 25 Jul 2022 14:31:35 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '22'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8B6:521E5:22CB7C8C:23AFC1C1:677847C7')] +{"id":1782917299,"node_id":"MDIwOkhlYWRSZWZSZXN0b3JlZEV2ZW50MTc4MjkxNzI5OQ==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1782917299","actor":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"head_ref_restored","commit_id":null,"commit_url":null,"created_at":"2018-08-10T16:39:23Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -182,8 +182,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:53 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4895'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"25f19f95a7043292b53a23436aa60231"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.087629'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'EFF5:0ABD:74AAF4:100FAEF:5B7F1A31')] -{"id":1783596418,"node_id":"MDE1Ok1pbGVzdG9uZWRFdmVudDE3ODM1OTY0MTg=","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783596418","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"milestoned","commit_id":null,"commit_url":null,"created_at":"2018-08-11T00:46:19Z","milestone":{"title":"Version 1.25.0"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b3e87e6cf16cf47a721d8bc10fbc4ffd64bbdccfb5de69a81fa08c2138421e97"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '23'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8BC:44383:228E7B5C:2372C04F:677847C8')] +{"id":1783596418,"node_id":"MDE1Ok1pbGVzdG9uZWRFdmVudDE3ODM1OTY0MTg=","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783596418","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"milestoned","commit_id":null,"commit_url":null,"created_at":"2018-08-11T00:46:19Z","milestone":{"title":"Version 1.25.0"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -193,8 +193,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:54 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4894'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"a11f30929314b0742ff91f4b6c8bb5c4"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.110909'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'E954:0ABA:3151AA:7CA228:5B7F1A32')] -{"id":1783596452,"node_id":"MDE3OkRlbWlsZXN0b25lZEV2ZW50MTc4MzU5NjQ1Mg==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783596452","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"demilestoned","commit_id":null,"commit_url":null,"created_at":"2018-08-11T00:46:22Z","milestone":{"title":"Version 1.25.0"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"cc5dad25645581397f99c5f3a6c61e4b856a880bce3f68ab547cceea21e5aab2"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4976'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '24'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8C8:4DB83:214C99FB:2230DF9B:677847C8')] +{"id":1783596452,"node_id":"MDE3OkRlbWlsZXN0b25lZEV2ZW50MTc4MzU5NjQ1Mg==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783596452","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"demilestoned","commit_id":null,"commit_url":null,"created_at":"2018-08-11T00:46:22Z","milestone":{"title":"Version 1.25.0"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -204,8 +204,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:55 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4893'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"a28045358f23ee01f926d42735aaabb9"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.093095'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'DADE:0AB9:498DD6:B4AD84:5B7F1A33')] -{"id":1783596743,"node_id":"MDExOkxvY2tlZEV2ZW50MTc4MzU5Njc0Mw==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783596743","actor":{"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},"event":"locked","commit_id":null,"commit_url":null,"created_at":"2018-08-11T00:46:56Z","lock_reason":"too heated","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"f5691eabf53dda490287e0d4dfdf7a35913d9a1edde0ec720bc3f4f3dec536cc"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4975'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '25'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8D4:47716:247AD5DB:255F1A9F:677847C8')] +{"id":1783596743,"node_id":"MDExOkxvY2tlZEV2ZW50MTc4MzU5Njc0Mw==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783596743","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"locked","commit_id":null,"commit_url":null,"created_at":"2018-08-11T00:46:56Z","lock_reason":"too heated","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -215,8 +215,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:56 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4892'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"8e4c8d72a74c7c3846ec8af70a71d922"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.068891'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'CD74:0ABF:A001EB:13C52A3:5B7F1A34')] -{"id":1783596818,"node_id":"MDEzOlVubG9ja2VkRXZlbnQxNzgzNTk2ODE4","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783596818","actor":{"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},"event":"unlocked","commit_id":null,"commit_url":null,"created_at":"2018-08-11T00:47:07Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:45 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"4c25911128355007be2a2fd2f10dd96ea418717b488e314f878df561df15e4a2"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4974'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '26'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8DA:4D2C4:233628AB:241A70A8:677847C9')] +{"id":1783596818,"node_id":"MDEzOlVubG9ja2VkRXZlbnQxNzgzNTk2ODE4","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783596818","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"unlocked","commit_id":null,"commit_url":null,"created_at":"2018-08-11T00:47:07Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -226,8 +226,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:57 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4891'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"b192301fc0c988dbf374c23c3b6782e2"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.082050'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'C4BE:0ABF:A00292:13C53E4:5B7F1A35')] -{"id":1783605084,"node_id":"MDIwOlJldmlld0Rpc21pc3NlZEV2ZW50MTc4MzYwNTA4NA==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783605084","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"review_dismissed","commit_id":null,"commit_url":null,"created_at":"2018-08-11T01:07:10Z","dismissed_review":{"state":"changes_requested","review_id":145431295,"dismissal_message":"dismiss"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:45 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"e7fb989c1c81f2c9efcc2848a60c0ec0ccffcc0007aa715ee17fd0a63722963b"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4973'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '27'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8E6:47716:247AD782:255F1C59:677847C9')] +{"id":1783605084,"node_id":"MDIwOlJldmlld0Rpc21pc3NlZEV2ZW50MTc4MzYwNTA4NA==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783605084","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"review_dismissed","commit_id":null,"commit_url":null,"created_at":"2018-08-11T01:07:10Z","dismissed_review":{"state":"changes_requested","review_id":145431295,"dismissal_message":"dismiss"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -237,8 +237,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:58 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4890'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"c611462fb35ce91ffcb3cbacc4956ad0"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.078285'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'E19A:0ABA:315230:7CA3D9:5B7F1A36')] -{"id":1783779835,"node_id":"MDI1OlJldmlld1JlcXVlc3RSZW1vdmVkRXZlbnQxNzgzNzc5ODM1","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783779835","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"review_request_removed","commit_id":null,"commit_url":null,"created_at":"2018-08-11T12:32:59Z","review_requester":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"requested_reviewer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"https://avatars0.githubusercontent.com/u/865541?v=4","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"https://github.com/jasonwhite","followers_url":"https://api.github.com/users/jasonwhite/followers","following_url":"https://api.github.com/users/jasonwhite/following{/other_user}","gists_url":"https://api.github.com/users/jasonwhite/gists{/gist_id}","starred_url":"https://api.github.com/users/jasonwhite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jasonwhite/subscriptions","organizations_url":"https://api.github.com/users/jasonwhite/orgs","repos_url":"https://api.github.com/users/jasonwhite/repos","events_url":"https://api.github.com/users/jasonwhite/events{/privacy}","received_events_url":"https://api.github.com/users/jasonwhite/received_events","type":"User","site_admin":false},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:45 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"731b28095eba1e3064e1591566d31e7e41beaca57b8f55494a048f26d9c41948"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4972'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '28'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8EA:7BB2F:22193A16:22FD7FBD:677847C9')] +{"id":1783779835,"node_id":"MDI1OlJldmlld1JlcXVlc3RSZW1vdmVkRXZlbnQxNzgzNzc5ODM1","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783779835","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"review_request_removed","commit_id":null,"commit_url":null,"created_at":"2018-08-11T12:32:59Z","review_requester":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"requested_reviewer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/865541?v=4","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"https://github.com/jasonwhite","followers_url":"https://api.github.com/users/jasonwhite/followers","following_url":"https://api.github.com/users/jasonwhite/following{/other_user}","gists_url":"https://api.github.com/users/jasonwhite/gists{/gist_id}","starred_url":"https://api.github.com/users/jasonwhite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jasonwhite/subscriptions","organizations_url":"https://api.github.com/users/jasonwhite/orgs","repos_url":"https://api.github.com/users/jasonwhite/repos","events_url":"https://api.github.com/users/jasonwhite/events{/privacy}","received_events_url":"https://api.github.com/users/jasonwhite/received_events","type":"User","user_view_type":"public","site_admin":false},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -248,8 +248,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:59 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4889'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"c4737a54b8a3e25200736104caf75b69"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.087883'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'F645:0ABA:314ED4:7C9B77:5B7F1A1B')] -{"id":1783779725,"node_id":"MDIyOk1hcmtlZEFzRHVwbGljYXRlRXZlbnQxNzgzNzc5NzI1","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783779725","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"marked_as_duplicate","commit_id":null,"commit_url":null,"created_at":"2018-08-11T12:32:35Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:46 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"5307d53daccda518a43ec8593a5406ad34b697b04ede36b674e79ec5bc886036"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4971'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '29'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8F0:1146F1:1DA1ADEE:1E6A9B71:677847CA')] +{"id":1783779725,"node_id":"MDIyOk1hcmtlZEFzRHVwbGljYXRlRXZlbnQxNzgzNzc5NzI1","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1783779725","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"marked_as_duplicate","commit_id":null,"commit_url":null,"created_at":"2018-08-11T12:32:35Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -259,8 +259,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:33 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4915'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"a184ed730763ee7d13ad0b91001ee0d3"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.098896'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D6DE:0ABF:9FF77A:13C3DE7:5B7F1A1C')] -{"id":1789228962,"node_id":"MDI0OlVubWFya2VkQXNEdXBsaWNhdGVFdmVudDE3ODkyMjg5NjI=","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1789228962","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"unmarked_as_duplicate","commit_id":null,"commit_url":null,"created_at":"2018-08-15T02:57:46Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:46 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"621c1b9878285c4381099d3c4c95475056dbe8ee0a020c05b50db8d442491eee"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4970'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '30'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B8FA:7CD91:22C52664:23A96CF9:677847CA')] +{"id":1789228962,"node_id":"MDI0OlVubWFya2VkQXNEdXBsaWNhdGVFdmVudDE3ODkyMjg5NjI=","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1789228962","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"unmarked_as_duplicate","commit_id":null,"commit_url":null,"created_at":"2018-08-15T02:57:46Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -270,8 +270,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:34 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4914'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"6dc6346c7f54f182fd6234d6e256df84"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.094375'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'E400:0ABF:9FF7F1:13C3ECD:5B7F1A1D')] -{"id":1791766828,"node_id":"MDE5OkFkZGVkVG9Qcm9qZWN0RXZlbnQxNzkxNzY2ODI4","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1791766828","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"added_to_project","commit_id":null,"commit_url":null,"created_at":"2018-08-16T08:13:24Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:46 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"0df632af3776a1c03d03d4f728b943cb14a1c346ceff2de5304eaaad3136561b"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4969'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '31'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B900:4D2C4:23362DCC:241A75DF:677847CA')] +{"id":1791766828,"node_id":"MDE5OkFkZGVkVG9Qcm9qZWN0RXZlbnQxNzkxNzY2ODI4","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1791766828","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"added_to_project","commit_id":null,"commit_url":null,"created_at":"2018-08-16T08:13:24Z","project_card":{"id":12179888,"url":"https://api.github.com/projects/columns/cards/12179888","project_id":1714960,"project_url":"https://api.github.com/projects/1714960","column_name":"To do"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -281,8 +281,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:35 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4913'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"fd57d20a075af6be908ebe9c9de2cddb"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.100872'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'F265:0ABA:314F33:7C9C61:5B7F1A1F')] -{"id":1791767766,"node_id":"MDI2Ok1vdmVkQ29sdW1uc0luUHJvamVjdEV2ZW50MTc5MTc2Nzc2Ng==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1791767766","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"moved_columns_in_project","commit_id":null,"commit_url":null,"created_at":"2018-08-16T08:13:55Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:47 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"1e032ab79e34a2cfcae8dd2ff5765cb381b06951c0be98b053bfb79d2d2779ad"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4968'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '32'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B90C:12E178:1D9DB72C:1E624F5F:677847CA')] +{"id":1791767766,"node_id":"MDI2Ok1vdmVkQ29sdW1uc0luUHJvamVjdEV2ZW50MTc5MTc2Nzc2Ng==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1791767766","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"moved_columns_in_project","commit_id":null,"commit_url":null,"created_at":"2018-08-16T08:13:55Z","project_card":{"id":12179888,"url":"https://api.github.com/projects/columns/cards/12179888","project_id":1714960,"project_url":"https://api.github.com/projects/1714960","column_name":"In progress","previous_column_name":"To do"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -292,8 +292,8 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:36 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4912'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"547f3ba825578e3408fe404bfd35b24e"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.098965'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'E9F1:0ABF:9FF8C9:13C4092:5B7F1A20')] -{"id":1791768212,"node_id":"MDIzOlJlbW92ZWRGcm9tUHJvamVjdEV2ZW50MTc5MTc2ODIxMg==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1791768212","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"removed_from_project","commit_id":null,"commit_url":null,"created_at":"2018-08-16T08:14:08Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-23T01:02:17Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n"}} +[('Date', 'Fri, 03 Jan 2025 20:25:47 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"8aed9355cfdb41a2cada98078087755a82bcb13607af34766d7ce78962a9227e"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4967'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '33'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B90E:4D2C4:23362F80:241A77A7:677847CB')] +{"id":1791768212,"node_id":"MDIzOlJlbW92ZWRGcm9tUHJvamVjdEV2ZW50MTc5MTc2ODIxMg==","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1791768212","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"removed_from_project","commit_id":null,"commit_url":null,"created_at":"2018-08-16T08:14:08Z","project_card":{"id":12179888,"url":"https://api.github.com/projects/columns/cards/12179888","project_id":1714960,"project_url":"https://api.github.com/projects/1714960","column_name":"In progress"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/events","html_url":"https://github.com/PyGithub/PyGithub/pull/857","id":348340651,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2NzEzMTAy","number":857,"title":"Adding new attributes to IssueEvent","user":{"login":"allevin","id":13543471,"node_id":"MDQ6VXNlcjEzNTQzNDcx","avatar_url":"https://avatars.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":895322782,"node_id":"MDU6TGFiZWw4OTUzMjI3ODI=","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/improvement","name":"improvement","color":"f46bb7","default":false,"description":""}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":27,"created_at":"2018-08-07T14:14:44Z","updated_at":"2018-08-24T16:09:23Z","closed_at":"2018-08-24T16:01:30Z","author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/857","html_url":"https://github.com/PyGithub/PyGithub/pull/857","diff_url":"https://github.com/PyGithub/PyGithub/pull/857.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/857.patch","merged_at":"2018-08-24T16:01:29Z"},"body":"See Issue #855 \r\n\r\nThe class [IssueEvent](https://github.com/PyGithub/PyGithub/blob/master/github/IssueEvent.py) is missing a large number of attributes documented in the [API](https://developer.github.com/v3/issues/events/).\r\n\r\nThis is also commented about in #653 to a degree\r\n\r\n27 of the tests 27 known event types have tests.\r\n\r\n**Currently Tested using Issue #30** \r\n- [x] subscribed\r\n- [x] assigned\r\n- [x] referenced \r\n- [x] closed \r\n- [x] labeled \r\n\r\n**Currently Tested using Issue/PR #538**\r\n- [x] merged\r\n- [x] mentioned\r\n- [x] review_requested\r\n\r\n**Currently Tested using Issue/PR #857**\r\n- [x] reopened\r\n- [x] unassigned\r\n- [x] unlabeled\r\n- [x] renamed\r\n- [x] base_ref_changed\r\n- [x] head_ref_deleted \r\n- [x] head_ref_restored\r\n- [x] milestoned\r\n- [x] demilestoned\r\n- [x] locked\r\n- [x] unlocked\r\n- [x] review_dismissed\r\n- [x] review_request_removed\r\n- [x] marked_as_duplicate\r\n- [x] unmarked_as_duplicate\r\n- [x] added_to_project \r\n- [x] moved_columns_in_project\r\n- [x] removed_from_project\r\n- [x] converted_note_to_issue - Note: this event is tied into Issue #866 \r\n\r\nThis PR is now ready to be merged\r\n\r\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/857/timeline","performed_via_github_app":null,"state_reason":null},"performed_via_github_app":null} https GET @@ -303,5 +303,5 @@ None {'Accept': 'application/vnd.github.sailor-v-preview+json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 23 Aug 2018 20:33:37 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4911'), ('X-RateLimit-Reset', '1535059890'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"c9c2512a1714a76980ef889b162b0824"'), ('Last-Modified', 'Tue, 21 Aug 2018 02:49:57 GMT'), ('X-OAuth-Scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.sailor-v-preview; format=json'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.113217'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'E9DA:0ABF:9FF928:13C4159:5B7F1A21')] -{"id":1791769149,"node_id":"MDI1OkNvbnZlcnRlZE5vdGVUb0lzc3VlRXZlbnQxNzkxNzY5MTQ5","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1791769149","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"event":"converted_note_to_issue","commit_id":null,"commit_url":null,"created_at":"2018-08-16T08:14:34Z","issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866/events","html_url":"https://github.com/PyGithub/PyGithub/issues/866","id":351101033,"node_id":"MDU6SXNzdWUzNTExMDEwMzM=","number":866,"title":"test issue to be created","user":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-08-16T08:14:33Z","updated_at":"2018-08-16T08:14:55Z","closed_at":"2018-08-16T08:14:55Z","author_association":"MEMBER","active_lock_reason":null,"body":""}} +[('Date', 'Fri, 03 Jan 2025 20:25:47 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"27415c3f3c9398515e21b74dd03423270d71029feb65a70d09087c732eaf115f"'), ('Last-Modified', 'Fri, 03 Jan 2025 12:21:24 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; param=sailor-v-preview; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4966'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '34'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'B91A:16833C:1C6784BD:1D28A3A2:677847CB')] +{"id":1791769149,"node_id":"MDI1OkNvbnZlcnRlZE5vdGVUb0lzc3VlRXZlbnQxNzkxNzY5MTQ5","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events/1791769149","actor":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"event":"converted_note_to_issue","commit_id":null,"commit_url":null,"created_at":"2018-08-16T08:14:34Z","project_card":{"id":12179901,"url":"https://api.github.com/projects/columns/cards/12179901","project_id":1714960,"project_url":"https://api.github.com/projects/1714960","column_name":"To do"},"issue":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866/events","html_url":"https://github.com/PyGithub/PyGithub/issues/866","id":351101033,"node_id":"MDU6SXNzdWUzNTExMDEwMzM=","number":866,"title":"test issue to be created","user":{"login":"sfdye","id":1016390,"node_id":"MDQ6VXNlcjEwMTYzOTA=","avatar_url":"https://avatars.githubusercontent.com/u/1016390?v=4","gravatar_id":"","url":"https://api.github.com/users/sfdye","html_url":"https://github.com/sfdye","followers_url":"https://api.github.com/users/sfdye/followers","following_url":"https://api.github.com/users/sfdye/following{/other_user}","gists_url":"https://api.github.com/users/sfdye/gists{/gist_id}","starred_url":"https://api.github.com/users/sfdye/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfdye/subscriptions","organizations_url":"https://api.github.com/users/sfdye/orgs","repos_url":"https://api.github.com/users/sfdye/repos","events_url":"https://api.github.com/users/sfdye/events{/privacy}","received_events_url":"https://api.github.com/users/sfdye/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-08-16T08:14:33Z","updated_at":"2018-08-16T08:14:55Z","closed_at":"2018-08-16T08:14:55Z","author_association":"MEMBER","active_lock_reason":null,"body":"","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/866/timeline","performed_via_github_app":null,"state_reason":"completed"},"performed_via_github_app":null} From 1836b0739381fbfc93cc6de8a0adb37d43fb6495 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 11:57:43 +0100 Subject: [PATCH 06/15] Sync IssuePullRequest class with API spec (#3143) Adds the following attributes: - merged_at - url --- github/IssuePullRequest.py | 21 +++++++++++++++++++-- tests/Issue.py | 2 ++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/github/IssuePullRequest.py b/github/IssuePullRequest.py index ee664860cd..e6c8be99f9 100644 --- a/github/IssuePullRequest.py +++ b/github/IssuePullRequest.py @@ -35,7 +35,10 @@ ################################################################################ -from typing import Any, Dict +from __future__ import annotations + +from datetime import datetime +from typing import Any from github.GithubObject import Attribute, NonCompletableGithubObject, NotSet @@ -54,7 +57,9 @@ class IssuePullRequest(NonCompletableGithubObject): def _initAttributes(self) -> None: self._diff_url: Attribute[str] = NotSet self._html_url: Attribute[str] = NotSet + self._merged_at: Attribute[datetime] = NotSet self._patch_url: Attribute[str] = NotSet + self._url: Attribute[str] = NotSet @property def diff_url(self) -> str: @@ -64,14 +69,26 @@ def diff_url(self) -> str: def html_url(self) -> str: return self._html_url.value + @property + def merged_at(self) -> datetime: + return self._merged_at.value + @property def patch_url(self) -> str: return self._patch_url.value - def _useAttributes(self, attributes: Dict[str, Any]) -> None: + @property + def url(self) -> str: + return self._url.value + + def _useAttributes(self, attributes: dict[str, Any]) -> None: if "diff_url" in attributes: # pragma no branch self._diff_url = self._makeStringAttribute(attributes["diff_url"]) if "html_url" in attributes: # pragma no branch self._html_url = self._makeStringAttribute(attributes["html_url"]) + if "merged_at" in attributes: # pragma no branch + self._merged_at = self._makeDatetimeAttribute(attributes["merged_at"]) if "patch_url" in attributes: # pragma no branch self._patch_url = self._makeStringAttribute(attributes["patch_url"]) + if "url" in attributes: # pragma no branch + self._url = self._makeStringAttribute(attributes["url"]) diff --git a/tests/Issue.py b/tests/Issue.py index 0389f037be..111714a44f 100644 --- a/tests/Issue.py +++ b/tests/Issue.py @@ -90,7 +90,9 @@ def testAttributes(self): self.assertEqual(self.issue.number, 28) self.assertEqual(self.issue.pull_request.diff_url, None) self.assertEqual(self.issue.pull_request.patch_url, None) + self.assertEqual(self.issue.pull_request.merged_at, None) self.assertEqual(self.issue.pull_request.html_url, None) + self.assertEqual(self.issue.pull_request.url, None) self.assertEqual(self.issue.state, "closed") self.assertEqual(self.issue.state_reason, "completed") self.assertEqual(self.issue.title, "Issue created by PyGithub") From 4535b9e150ce051e7fca05c19afd9d90058cb261 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 11:57:48 +0100 Subject: [PATCH 07/15] Sync Label class with API spec (#3144) Adds the following attributes: - default - id - node_id --- github/Label.py | 30 +++++++++++++++++++++++++-- tests/Label.py | 16 +++++++++----- tests/ReplayData/Label.setUp.txt | 23 ++++++-------------- tests/ReplayData/Label.testDelete.txt | 2 +- tests/ReplayData/Label.testEdit.txt | 4 ++-- 5 files changed, 48 insertions(+), 27 deletions(-) diff --git a/github/Label.py b/github/Label.py index f541348d70..226919e3ce 100644 --- a/github/Label.py +++ b/github/Label.py @@ -40,8 +40,10 @@ # # ################################################################################ +from __future__ import annotations + import urllib.parse -from typing import Any, Dict +from typing import Any from github import Consts from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional @@ -67,8 +69,11 @@ class Label(CompletableGithubObject): def _initAttributes(self) -> None: self._color: Attribute[str] = NotSet + self._default: Attribute[bool] = NotSet self._description: Attribute[str] = NotSet + self._id: Attribute[int] = NotSet self._name: Attribute[str] = NotSet + self._node_id: Attribute[str] = NotSet self._url: Attribute[str] = NotSet def __repr__(self) -> str: @@ -83,16 +88,31 @@ def color(self) -> str: self._completeIfNotSet(self._color) return self._color.value + @property + def default(self) -> bool: + self._completeIfNotSet(self._default) + return self._default.value + @property def description(self) -> str: self._completeIfNotSet(self._description) return self._description.value + @property + def id(self) -> int: + self._completeIfNotSet(self._id) + return self._id.value + @property def name(self) -> str: self._completeIfNotSet(self._name) return self._name.value + @property + def node_id(self) -> str: + self._completeIfNotSet(self._node_id) + return self._node_id.value + @property def url(self) -> str: self._completeIfNotSet(self._url) @@ -120,12 +140,18 @@ def edit(self, name: str, color: str, description: Opt[str] = NotSet) -> None: ) self._useAttributes(data) - def _useAttributes(self, attributes: Dict[str, Any]) -> None: + def _useAttributes(self, attributes: dict[str, Any]) -> None: if "color" in attributes: # pragma no branch self._color = self._makeStringAttribute(attributes["color"]) + if "default" in attributes: # pragma no branch + self._default = self._makeBoolAttribute(attributes["default"]) if "description" in attributes: # pragma no branch self._description = self._makeStringAttribute(attributes["description"]) + 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 "url" in attributes: # pragma no branch self._url = self._makeStringAttribute(attributes["url"]) diff --git a/tests/Label.py b/tests/Label.py index 256d94bd68..0b50e70d44 100644 --- a/tests/Label.py +++ b/tests/Label.py @@ -34,20 +34,26 @@ # # ################################################################################ +from __future__ import annotations + from . import Framework class Label(Framework.TestCase): def setUp(self): super().setUp() - self.label = self.g.get_user().get_repo("PyGithub").get_label("Bug") + self.label = self.g.get_repo("PyGithub/PyGithub").get_label("Bug") def testAttributes(self): self.assertEqual(self.label.color, "e10c02") - self.assertEqual(self.label.name, "Bug") + self.assertEqual(self.label.default, True) + self.assertIsNone(self.label.description) + self.assertEqual(self.label.id, 3330121) + self.assertEqual(self.label.name, "bug") self.assertIsNone(self.label.description) - self.assertEqual(self.label.url, "https://api.github.com/repos/jacquev6/PyGithub/labels/Bug") - self.assertEqual(repr(self.label), 'Label(name="Bug")') + self.assertEqual(self.label.node_id, "MDU6TGFiZWwzMzMwMTIx") + self.assertEqual(self.label.url, "https://api.github.com/repos/PyGithub/PyGithub/labels/bug") + self.assertEqual(repr(self.label), 'Label(name="bug")') def testEdit(self): self.label.edit("LabelEditedByPyGithub", "0000ff", "Description of LabelEditedByPyGithub") @@ -56,7 +62,7 @@ def testEdit(self): self.assertEqual(self.label.name, "LabelEditedByPyGithub") self.assertEqual( self.label.url, - "https://api.github.com/repos/jacquev6/PyGithub/labels/LabelEditedByPyGithub", + "https://api.github.com/repos/PyGithub/PyGithub/labels/LabelEditedByPyGithub", ) def testDelete(self): diff --git a/tests/ReplayData/Label.setUp.txt b/tests/ReplayData/Label.setUp.txt index 0dafe60777..a56c619a53 100644 --- a/tests/ReplayData/Label.setUp.txt +++ b/tests/ReplayData/Label.setUp.txt @@ -2,31 +2,20 @@ https GET api.github.com None -/user +/repos/PyGithub/PyGithub {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4964'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"708be4e44b32b617fad893a7eb4aed93"'), ('date', 'Sat, 19 May 2012 10:17:52 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"type":"User","public_gists":1,"company":"Criteo","blog":"http://vincent-jacques.net","url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","total_private_repos":5,"private_gists":5,"collaborators":0,"plan":{"private_repos":5,"collaborators":1,"name":"micro","space":614400},"public_repos":11,"followers":13,"owned_private_repos":5,"hireable":false,"login":"jacquev6","email":"vincent@vincent-jacques.net","bio":"","disk_usage":16768,"html_url":"https://github.com/jacquev6","name":"Vincent Jacques","created_at":"2010-07-09T06:10:06Z","location":"Paris, France","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146,"following":24} +[('Date', 'Fri, 03 Jan 2025 20:54:50 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"581c439a3aed8bca0c870e7f3ba3b1615b67e161e36dbf91afdf4c180a753f09"'), ('Last-Modified', 'Fri, 03 Jan 2025 18:50:01 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4965'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '35'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'D144:4DB83:215E3141:2242EEFB:67784E9A')] +{"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","user_view_type":"public","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":"2025-01-03T18:50:01Z","pushed_at":"2024-12-19T12:01:11Z","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":16425,"stargazers_count":7117,"watchers_count":7117,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1792,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":356,"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":1792,"open_issues":356,"watchers":7117,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":false,"allow_rebase_merge":false,"allow_auto_merge":false,"delete_branch_on_merge":true,"allow_update_branch":true,"use_squash_pr_title_as_default":true,"squash_merge_commit_message":"PR_BODY","squash_merge_commit_title":"PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","custom_properties":{},"organization":{"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","user_view_type":"public","site_admin":false},"security_and_analysis":{"secret_scanning":{"status":"disabled"},"secret_scanning_push_protection":{"status":"disabled"},"dependabot_security_updates":{"status":"enabled"},"secret_scanning_non_provider_patterns":{"status":"disabled"},"secret_scanning_validity_checks":{"status":"disabled"}},"network_count":1792,"subscribers_count":111} https GET api.github.com None -/repos/jacquev6/PyGithub +/repos/PyGithub/PyGithub/labels/Bug {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4963'), ('content-length', '1097'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"1da4fc53170e51b749ed7930a5fe947c"'), ('date', 'Sat, 19 May 2012 10:17:52 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"svn_url":"https://github.com/jacquev6/PyGithub","has_wiki":false,"has_issues":true,"updated_at":"2012-05-18T20:30:15Z","forks":2,"homepage":"http://vincent-jacques.net/PyGithub","url":"https://api.github.com/repos/jacquev6/PyGithub","clone_url":"https://github.com/jacquev6/PyGithub.git","git_url":"git://github.com/jacquev6/PyGithub.git","open_issues":17,"fork":false,"ssh_url":"git@github.com:jacquev6/PyGithub.git","pushed_at":"2012-05-18T20:30:14Z","mirror_url":null,"size":220,"private":false,"has_downloads":true,"watchers":13,"html_url":"https://github.com/jacquev6/PyGithub","owner":{"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},"name":"PyGithub","permissions":{"pull":true,"admin":true,"push":true},"language":"Python","description":"Python library implementing the full Github API v3","created_at":"2012-02-25T12:53:47Z","id":3544490} - -https -GET -api.github.com -None -/repos/jacquev6/PyGithub/labels/Bug -{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('content-length', '97'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"fe2e942523eecb156d100829a6347516"'), ('date', 'Sat, 19 May 2012 09:40:37 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug","name":"Bug","color":"e10c02"} +[('Date', 'Fri, 03 Jan 2025 20:54:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"5953a55703ef0aaad9567958cd89107d3015ffdae76c85bdded1f252a77eeca7"'), ('Last-Modified', 'Wed, 18 Mar 2015 19:11:19 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4964'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '36'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'D150:5A83E:21B1AEF0:22966EC9:67784E9B')] +{"id":3330121,"node_id":"MDU6TGFiZWwzMzMwMTIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/bug","name":"bug","color":"e10c02","default":true,"description":null} diff --git a/tests/ReplayData/Label.testDelete.txt b/tests/ReplayData/Label.testDelete.txt index 41495db56c..63e0d7a3e9 100644 --- a/tests/ReplayData/Label.testDelete.txt +++ b/tests/ReplayData/Label.testDelete.txt @@ -2,7 +2,7 @@ https DELETE api.github.com None -/repos/jacquev6/PyGithub/labels/Bug +/repos/PyGithub/PyGithub/labels/bug {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 204 diff --git a/tests/ReplayData/Label.testEdit.txt b/tests/ReplayData/Label.testEdit.txt index ed6804593b..4b933fe1da 100644 --- a/tests/ReplayData/Label.testEdit.txt +++ b/tests/ReplayData/Label.testEdit.txt @@ -2,9 +2,9 @@ https PATCH api.github.com None -/repos/jacquev6/PyGithub/labels/Bug +/repos/PyGithub/PyGithub/labels/bug {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Accept': 'application/vnd.github.symmetra-preview+json'} {"color": "0000ff", "new_name": "LabelEditedByPyGithub", "description": "Description of LabelEditedByPyGithub"} 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4965'), ('content-length', '133'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"57435796bd4f14b84ad92105669cfab1"'), ('date', 'Sat, 19 May 2012 10:17:44 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/LabelEditedByPyGithub","name":"LabelEditedByPyGithub","color":"0000ff","description":"Description of LabelEditedByPyGithub"} +{"url":"https://api.github.com/repos/PyGithub/PyGithub/labels/LabelEditedByPyGithub","name":"LabelEditedByPyGithub","color":"0000ff","description":"Description of LabelEditedByPyGithub"} From dda13366624299f61e2697e11822c896ef620002 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 11:57:52 +0100 Subject: [PATCH 08/15] Sync License class with API spec (#3145) Adds the following attributes: - node_id --- github/License.py | 8 ++++++++ tests/License.py | 4 ++++ tests/ReplayData/License.setUp.txt | 4 ++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/github/License.py b/github/License.py index 61f012718b..a8d0c25ff3 100644 --- a/github/License.py +++ b/github/License.py @@ -71,6 +71,7 @@ def _initAttributes(self) -> None: self._key: Attribute[str] = NotSet self._limitations: Attribute[list[str]] = NotSet self._name: Attribute[str] = NotSet + self._node_id: Attribute[str] = NotSet self._permissions: Attribute[list[str]] = NotSet self._spdx_id: Attribute[str] = NotSet self._url: Attribute[str] = NotSet @@ -118,6 +119,11 @@ def name(self) -> str: self._completeIfNotSet(self._name) return self._name.value + @property + def node_id(self) -> str: + self._completeIfNotSet(self._node_id) + return self._node_id.value + @property def permissions(self) -> list[str]: self._completeIfNotSet(self._permissions) @@ -150,6 +156,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._limitations = self._makeListOfStringsAttribute(attributes["limitations"]) 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 "permissions" in attributes: # pragma no branch self._permissions = self._makeListOfStringsAttribute(attributes["permissions"]) if "spdx_id" in attributes: # pragma no branch diff --git a/tests/License.py b/tests/License.py index fdf3baa014..295f03d601 100644 --- a/tests/License.py +++ b/tests/License.py @@ -26,6 +26,8 @@ # # ################################################################################ +from __future__ import annotations + from . import Framework @@ -35,12 +37,14 @@ def setUp(self): self.license = self.g.get_license("mit") def testAttributes(self): + self.assertEqual(self.license.html_url, "http://choosealicense.com/licenses/mit/") self.assertEqual(self.license.key, "mit") self.assertEqual(self.license.name, "MIT License") self.assertEqual( self.license.description, "A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code.", ) + self.assertEqual(self.license.node_id, "MDc6TGljZW5zZTEz") self.assertEqual(self.license.spdx_id, "MIT") self.assertEqual( self.license.body, diff --git a/tests/ReplayData/License.setUp.txt b/tests/ReplayData/License.setUp.txt index cdd640fc43..560c3c2314 100644 --- a/tests/ReplayData/License.setUp.txt +++ b/tests/ReplayData/License.setUp.txt @@ -6,5 +6,5 @@ None {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('content-length', '1927'), ('x-runtime-rack', '0.021099'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('x-oauth-scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('x-accepted-oauth-scopes', ''), ('etag', '"9f803324f4a6fde118084a597a68c1c5"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('status', '200 OK'), ('x-ratelimit-remaining', '4932'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, 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-request-id', 'DFF3:5CB3:1DA121:26987F:5AB33249'), ('date', 'Thu, 22 Mar 2018 04:34:17 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1521696564')] -{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","html_url":"http://choosealicense.com/licenses/mit/","description":"A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code.","implementation":"Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file. Replace [year] with the current year and [fullname] with the name (or names) of the copyright holders.","permissions":["commercial-use","modifications","distribution","private-use"],"conditions":["include-copyright"],"limitations":["liability","warranty"],"body":"MIT License\n\nCopyright (c) [year] [fullname]\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","featured":true} +[('Date', 'Fri, 03 Jan 2025 21:02:19 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"490649ace0d045490f6aae672bacf638dd2b937aeb7c8f94c050fbd93d1fa27f"'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4963'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '37'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'A1B4:12E656:1E70F9BB:1F3C75B3:6778505A')] +{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz","html_url":"http://choosealicense.com/licenses/mit/","description":"A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code.","implementation":"Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file. Replace [year] with the current year and [fullname] with the name (or names) of the copyright holders.","permissions":["commercial-use","modifications","distribution","private-use"],"conditions":["include-copyright"],"limitations":["liability","warranty"],"body":"MIT License\n\nCopyright (c) [year] [fullname]\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","featured":true} From bc643cc8b6bcfda4855409728417ba806bd16272 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 11:57:56 +0100 Subject: [PATCH 09/15] Sync Membership class with API spec (#3146) Adds the following attributes: - permissions --- github/Membership.py | 8 +++++++ tests/{GitMembership.py => Membership.py} | 23 ++++++++++++------- ...GetMembership.txt => Membership.setUp.txt} | 11 --------- 3 files changed, 23 insertions(+), 19 deletions(-) rename tests/{GitMembership.py => Membership.py} (80%) rename tests/ReplayData/{GitMembership.testGetMembership.txt => Membership.setUp.txt} (70%) diff --git a/github/Membership.py b/github/Membership.py index 7e3c622901..98b252f70d 100644 --- a/github/Membership.py +++ b/github/Membership.py @@ -69,6 +69,7 @@ class Membership(CompletableGithubObject): def _initAttributes(self) -> None: self._organization: Attribute[Organization] = NotSet self._organization_url: Attribute[str] = NotSet + self._permissions: Attribute[dict[str, Any]] = NotSet self._role: Attribute[str] = NotSet self._state: Attribute[str] = NotSet self._url: Attribute[str] = NotSet @@ -87,6 +88,11 @@ def organization_url(self) -> str: self._completeIfNotSet(self._organization_url) return self._organization_url.value + @property + def permissions(self) -> dict[str, Any]: + self._completeIfNotSet(self._permissions) + return self._permissions.value + @property def role(self) -> str: self._completeIfNotSet(self._role) @@ -112,6 +118,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._organization = self._makeClassAttribute(github.Organization.Organization, attributes["organization"]) if "organization_url" in attributes: # pragma no branch self._organization_url = self._makeStringAttribute(attributes["organization_url"]) + if "permissions" in attributes: # pragma no branch + self._permissions = self._makeDictAttribute(attributes["permissions"]) if "role" in attributes: # pragma no branch self._role = self._makeStringAttribute(attributes["role"]) if "state" in attributes: # pragma no branch diff --git a/tests/GitMembership.py b/tests/Membership.py similarity index 80% rename from tests/GitMembership.py rename to tests/Membership.py index bd8641b5d8..0fa46a160e 100644 --- a/tests/GitMembership.py +++ b/tests/Membership.py @@ -36,14 +36,21 @@ # # ################################################################################ +from __future__ import annotations + from . import Framework -class GitMembership(Framework.TestCase): - def testGetMembership(self): - octocat = self.g.get_user() - self.assertEqual(octocat.login, "octocat") - membership_data = octocat.get_organization_membership("github") - self.assertEqual(membership_data.user.login, "octocat") - self.assertEqual(membership_data.role, "admin") - self.assertEqual(membership_data.organization.login, "github") +class Membership(Framework.TestCase): + def setUp(self): + super().setUp() + self.membership = self.g.get_user().get_organization_membership("github") + + def testAttributes(self): + self.assertEqual(self.membership.organization.login, "github") + self.assertEqual(self.membership.organization_url, "https://api.github.com/orgs/invitocat") + self.assertIsNone(self.membership.permissions) + self.assertEqual(self.membership.role, "admin") + self.assertEqual(self.membership.state, "pending") + self.assertEqual(self.membership.url, "https://api.github.com/orgs/invitocat/memberships/defunkt") + self.assertEqual(self.membership.user.login, "octocat") diff --git a/tests/ReplayData/GitMembership.testGetMembership.txt b/tests/ReplayData/Membership.setUp.txt similarity index 70% rename from tests/ReplayData/GitMembership.testGetMembership.txt rename to tests/ReplayData/Membership.setUp.txt index 9bca4bcf23..c00a7e13a7 100644 --- a/tests/ReplayData/GitMembership.testGetMembership.txt +++ b/tests/ReplayData/Membership.setUp.txt @@ -1,14 +1,3 @@ -https -GET -api.github.com -None -/user -{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} -null -200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4960'), ('content-length', '598'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"75740284d989e9a492e32f435cff48ac"'), ('date', 'Sat, 16 Apr 2018 20:23:33 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"type":"User","public_gists":19,"url":"https://api.github.com/users/octocat","hireable":false,"bio":null,"company":"Github","gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","login":"octocat","blog":"http://blog.github.com","email":"info@github.com","public_repos":62,"followers":299,"name":"Octocat","created_at":"2009-05-12T21:19:38Z","location":"Netherlands","avatar_url":"","id":83844,"following":41,"html_url":"https://github.com/nvie"} - https GET api.github.com From dabc1fb2a22294cd66328fb24898c7de5af5fe8a Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 11:58:01 +0100 Subject: [PATCH 10/15] Sync Migration class with API spec (#3147) Adds the following attributes: - archive_url - exclude - exclude_git_data - exclude_metadata - exclude_owner_projects - exclude_releases - node_id - org_metadata_only --- github/Migration.py | 66 ++++++++++++++++++++++++++++ tests/Migration.py | 20 +++++++++ tests/ReplayData/Migration.setUp.txt | 2 +- 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/github/Migration.py b/github/Migration.py index 616293a124..8616ae2794 100644 --- a/github/Migration.py +++ b/github/Migration.py @@ -70,28 +70,68 @@ class Migration(CompletableGithubObject): """ def _initAttributes(self) -> None: + self._archive_url: Attribute[str] = NotSet + self._created_at: Attribute[datetime] = NotSet + self._exclude: Attribute[list[str]] = NotSet self._exclude_attachments: Attribute[bool] = NotSet + self._exclude_git_data: Attribute[bool] = NotSet + self._exclude_metadata: Attribute[bool] = NotSet + self._exclude_owner_projects: Attribute[bool] = NotSet + self._exclude_releases: Attribute[bool] = NotSet self._guid: Attribute[str] = NotSet self._id: Attribute[int] = NotSet self._lock_repositories: Attribute[bool] = NotSet + self._node_id: Attribute[str] = NotSet + self._org_metadata_only: Attribute[bool] = NotSet self._owner: Attribute[github.NamedUser.NamedUser] = NotSet self._repositories: Attribute[list[github.Repository.Repository]] = NotSet self._state: Attribute[str] = NotSet + self._updated_at: Attribute[datetime] = NotSet self._url: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"state": self._state.value, "url": self._url.value}) + @property + def archive_url(self) -> str: + self._completeIfNotSet(self._archive_url) + return self._archive_url.value + @property def created_at(self) -> datetime: self._completeIfNotSet(self._created_at) return self._created_at.value + @property + def exclude(self) -> list[str]: + self._completeIfNotSet(self._exclude) + return self._exclude.value + @property def exclude_attachments(self) -> bool: self._completeIfNotSet(self._exclude_attachments) return self._exclude_attachments.value + @property + def exclude_git_data(self) -> bool: + self._completeIfNotSet(self._exclude_git_data) + return self._exclude_git_data.value + + @property + def exclude_metadata(self) -> bool: + self._completeIfNotSet(self._exclude_metadata) + return self._exclude_metadata.value + + @property + def exclude_owner_projects(self) -> bool: + self._completeIfNotSet(self._exclude_owner_projects) + return self._exclude_owner_projects.value + + @property + def exclude_releases(self) -> bool: + self._completeIfNotSet(self._exclude_releases) + return self._exclude_releases.value + @property def guid(self) -> str: self._completeIfNotSet(self._guid) @@ -106,6 +146,16 @@ def lock_repositories(self) -> bool: self._completeIfNotSet(self._repositories) return self._lock_repositories.value + @property + def node_id(self) -> str: + self._completeIfNotSet(self._node_id) + return self._node_id.value + + @property + def org_metadata_only(self) -> bool: + self._completeIfNotSet(self._org_metadata_only) + return self._org_metadata_only.value + @property def owner(self) -> github.NamedUser.NamedUser: self._completeIfNotSet(self._owner) @@ -175,16 +225,32 @@ def unlock_repo(self, repo_name: str) -> None: ) def _useAttributes(self, attributes: dict[str, Any]) -> None: + if "archive_url" in attributes: # pragma no branch + self._archive_url = self._makeStringAttribute(attributes["archive_url"]) if "created_at" in attributes: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) + if "exclude" in attributes: # pragma no branch + self._exclude = self._makeListOfStringsAttribute(attributes["exclude"]) if "exclude_attachments" in attributes: self._exclude_attachments = self._makeBoolAttribute(attributes["exclude_attachments"]) + if "exclude_git_data" in attributes: # pragma no branch + self._exclude_git_data = self._makeBoolAttribute(attributes["exclude_git_data"]) + if "exclude_metadata" in attributes: # pragma no branch + self._exclude_metadata = self._makeBoolAttribute(attributes["exclude_metadata"]) + if "exclude_owner_projects" in attributes: # pragma no branch + self._exclude_owner_projects = self._makeBoolAttribute(attributes["exclude_owner_projects"]) + if "exclude_releases" in attributes: # pragma no branch + self._exclude_releases = self._makeBoolAttribute(attributes["exclude_releases"]) if "guid" in attributes: self._guid = self._makeStringAttribute(attributes["guid"]) if "id" in attributes: self._id = self._makeIntAttribute(attributes["id"]) if "lock_repositories" in attributes: self._lock_repositories = self._makeBoolAttribute(attributes["lock_repositories"]) + if "node_id" in attributes: # pragma no branch + self._node_id = self._makeStringAttribute(attributes["node_id"]) + if "org_metadata_only" in attributes: # pragma no branch + self._org_metadata_only = self._makeBoolAttribute(attributes["org_metadata_only"]) if "owner" in attributes: self._owner = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["owner"]) if "repositories" in attributes: diff --git a/tests/Migration.py b/tests/Migration.py index 0e8b660a41..cf64bf7c6f 100644 --- a/tests/Migration.py +++ b/tests/Migration.py @@ -27,6 +27,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timedelta, timezone import github @@ -41,14 +43,32 @@ def setUp(self): self.migration = self.user.get_migrations()[0] def testAttributes(self): + self.assertIsNone(self.migration.archive_url) + self.assertEqual( + self.migration.created_at, datetime(2018, 9, 14, 1, 35, 35, tzinfo=timezone(timedelta(seconds=19800))) + ) + self.assertEqual(self.migration.exclude, ["repositories"]) + self.assertEqual(self.migration.exclude_attachments, False) + self.assertEqual(self.migration.exclude_git_data, False) + self.assertEqual(self.migration.exclude_metadata, False) + self.assertEqual(self.migration.exclude_owner_projects, False) + self.assertEqual(self.migration.exclude_releases, False) + self.assertEqual(self.migration.guid, "608bceae-b790-11e8-8b43-4e3cb0dd56cc") self.assertEqual(self.migration.id, 25320) + self.assertEqual(self.migration.lock_repositories, False) + self.assertEqual(self.migration.node_id, "MDk6TWlncmF0aW9uMjUzMjA=") + self.assertEqual(self.migration.org_metadata_only, False) self.assertEqual(self.migration.owner.login, "singh811") self.assertEqual(self.migration.guid, "608bceae-b790-11e8-8b43-4e3cb0dd56cc") + self.assertEqual(self.migration.repositories[0].full_name, "singh811/sample-repo") self.assertEqual(self.migration.state, "exported") self.assertEqual(self.migration.lock_repositories, False) self.assertEqual(self.migration.exclude_attachments, False) self.assertEqual(len(self.migration.repositories), 1) self.assertEqual(self.migration.repositories[0].name, "sample-repo") + self.assertEqual( + self.migration.updated_at, datetime(2018, 9, 14, 1, 35, 46, tzinfo=timezone(timedelta(seconds=19800))) + ) self.assertEqual(self.migration.url, "https://api.github.com/user/migrations/25320") self.assertEqual( self.migration.created_at, diff --git a/tests/ReplayData/Migration.setUp.txt b/tests/ReplayData/Migration.setUp.txt index a45566cffd..dbbd665063 100644 --- a/tests/ReplayData/Migration.setUp.txt +++ b/tests/ReplayData/Migration.setUp.txt @@ -7,4 +7,4 @@ None None 200 [('Server', 'GitHub.com'), ('Date', 'Thu, 13 Sep 2018 20:18:23 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Status', '200 OK'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4967'), ('X-RateLimit-Reset', '1536871398'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('ETag', 'W/"0e6e9ad6d4eb6ea5556826cc673d7145"'), ('X-GitHub-Media-Type', 'github.wyandotte-preview; format=json'), ('Link', '; rel="next", ; rel="last"'), ('Access-Control-Expose-Headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('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-Runtime-rack', '0.256511'), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'F2A0:20F9:4E070C:C80BBD:5B9AC60E')] -[{"id":25320,"node_id":"MDk6TWlncmF0aW9uMjUzMjA=","owner":{"login":"singh811","id":41840111,"node_id":"MDQ6VXNlcjQxODQwMTEx","avatar_url":"https://avatars2.githubusercontent.com/u/41840111?v=4","gravatar_id":"","url":"https://api.github.com/users/singh811","html_url":"https://github.com/singh811","followers_url":"https://api.github.com/users/singh811/followers","following_url":"https://api.github.com/users/singh811/following{/other_user}","gists_url":"https://api.github.com/users/singh811/gists{/gist_id}","starred_url":"https://api.github.com/users/singh811/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/singh811/subscriptions","organizations_url":"https://api.github.com/users/singh811/orgs","repos_url":"https://api.github.com/users/singh811/repos","events_url":"https://api.github.com/users/singh811/events{/privacy}","received_events_url":"https://api.github.com/users/singh811/received_events","type":"User","site_admin":false},"guid":"608bceae-b790-11e8-8b43-4e3cb0dd56cc","state":"exported","lock_repositories":false,"exclude_attachments":false,"repositories":[{"id":148631065,"node_id":"MDEwOlJlcG9zaXRvcnkxNDg2MzEwNjU=","name":"sample-repo","full_name":"singh811/sample-repo","owner":{"login":"singh811","id":41840111,"node_id":"MDQ6VXNlcjQxODQwMTEx","avatar_url":"https://avatars2.githubusercontent.com/u/41840111?v=4","gravatar_id":"","url":"https://api.github.com/users/singh811","html_url":"https://github.com/singh811","followers_url":"https://api.github.com/users/singh811/followers","following_url":"https://api.github.com/users/singh811/following{/other_user}","gists_url":"https://api.github.com/users/singh811/gists{/gist_id}","starred_url":"https://api.github.com/users/singh811/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/singh811/subscriptions","organizations_url":"https://api.github.com/users/singh811/orgs","repos_url":"https://api.github.com/users/singh811/repos","events_url":"https://api.github.com/users/singh811/events{/privacy}","received_events_url":"https://api.github.com/users/singh811/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/singh811/sample-repo","description":null,"fork":false,"url":"https://api.github.com/repos/singh811/sample-repo","forks_url":"https://api.github.com/repos/singh811/sample-repo/forks","keys_url":"https://api.github.com/repos/singh811/sample-repo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/singh811/sample-repo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/singh811/sample-repo/teams","hooks_url":"https://api.github.com/repos/singh811/sample-repo/hooks","issue_events_url":"https://api.github.com/repos/singh811/sample-repo/issues/events{/number}","events_url":"https://api.github.com/repos/singh811/sample-repo/events","assignees_url":"https://api.github.com/repos/singh811/sample-repo/assignees{/user}","branches_url":"https://api.github.com/repos/singh811/sample-repo/branches{/branch}","tags_url":"https://api.github.com/repos/singh811/sample-repo/tags","blobs_url":"https://api.github.com/repos/singh811/sample-repo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/singh811/sample-repo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/singh811/sample-repo/git/refs{/sha}","trees_url":"https://api.github.com/repos/singh811/sample-repo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/singh811/sample-repo/statuses/{sha}","languages_url":"https://api.github.com/repos/singh811/sample-repo/languages","stargazers_url":"https://api.github.com/repos/singh811/sample-repo/stargazers","contributors_url":"https://api.github.com/repos/singh811/sample-repo/contributors","subscribers_url":"https://api.github.com/repos/singh811/sample-repo/subscribers","subscription_url":"https://api.github.com/repos/singh811/sample-repo/subscription","commits_url":"https://api.github.com/repos/singh811/sample-repo/commits{/sha}","git_commits_url":"https://api.github.com/repos/singh811/sample-repo/git/commits{/sha}","comments_url":"https://api.github.com/repos/singh811/sample-repo/comments{/number}","issue_comment_url":"https://api.github.com/repos/singh811/sample-repo/issues/comments{/number}","contents_url":"https://api.github.com/repos/singh811/sample-repo/contents/{+path}","compare_url":"https://api.github.com/repos/singh811/sample-repo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/singh811/sample-repo/merges","archive_url":"https://api.github.com/repos/singh811/sample-repo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/singh811/sample-repo/downloads","issues_url":"https://api.github.com/repos/singh811/sample-repo/issues{/number}","pulls_url":"https://api.github.com/repos/singh811/sample-repo/pulls{/number}","milestones_url":"https://api.github.com/repos/singh811/sample-repo/milestones{/number}","notifications_url":"https://api.github.com/repos/singh811/sample-repo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/singh811/sample-repo/labels{/name}","releases_url":"https://api.github.com/repos/singh811/sample-repo/releases{/id}","deployments_url":"https://api.github.com/repos/singh811/sample-repo/deployments","created_at":"2018-09-13T11:58:30Z","updated_at":"2018-09-13T20:05:35Z","pushed_at":"2018-09-13T11:58:31Z","git_url":"git://github.com/singh811/sample-repo.git","ssh_url":"git@github.com:singh811/sample-repo.git","clone_url":"https://github.com/singh811/sample-repo.git","svn_url":"https://github.com/singh811/sample-repo","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,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master","permissions":{"admin":true,"push":true,"pull":true}}],"url":"https://api.github.com/user/migrations/25320","created_at":"2018-09-14T01:35:35.000+05:30","updated_at":"2018-09-14T01:35:46.000+05:30"}] +[{"id":25320,"node_id":"MDk6TWlncmF0aW9uMjUzMjA=","owner":{"login":"singh811","id":41840111,"node_id":"MDQ6VXNlcjQxODQwMTEx","avatar_url":"https://avatars2.githubusercontent.com/u/41840111?v=4","gravatar_id":"","url":"https://api.github.com/users/singh811","html_url":"https://github.com/singh811","followers_url":"https://api.github.com/users/singh811/followers","following_url":"https://api.github.com/users/singh811/following{/other_user}","gists_url":"https://api.github.com/users/singh811/gists{/gist_id}","starred_url":"https://api.github.com/users/singh811/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/singh811/subscriptions","organizations_url":"https://api.github.com/users/singh811/orgs","repos_url":"https://api.github.com/users/singh811/repos","events_url":"https://api.github.com/users/singh811/events{/privacy}","received_events_url":"https://api.github.com/users/singh811/received_events","type":"User","site_admin":false},"guid":"608bceae-b790-11e8-8b43-4e3cb0dd56cc","state":"exported","lock_repositories":false,"exclude":["repositories"],"exclude_attachments":false,"exclude_git_data":false,"exclude_metadata":false,"exclude_owner_projects":false,"exclude_releases":false,"org_metadata_only":false,"repositories":[{"id":148631065,"node_id":"MDEwOlJlcG9zaXRvcnkxNDg2MzEwNjU=","name":"sample-repo","full_name":"singh811/sample-repo","owner":{"login":"singh811","id":41840111,"node_id":"MDQ6VXNlcjQxODQwMTEx","avatar_url":"https://avatars2.githubusercontent.com/u/41840111?v=4","gravatar_id":"","url":"https://api.github.com/users/singh811","html_url":"https://github.com/singh811","followers_url":"https://api.github.com/users/singh811/followers","following_url":"https://api.github.com/users/singh811/following{/other_user}","gists_url":"https://api.github.com/users/singh811/gists{/gist_id}","starred_url":"https://api.github.com/users/singh811/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/singh811/subscriptions","organizations_url":"https://api.github.com/users/singh811/orgs","repos_url":"https://api.github.com/users/singh811/repos","events_url":"https://api.github.com/users/singh811/events{/privacy}","received_events_url":"https://api.github.com/users/singh811/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/singh811/sample-repo","description":null,"fork":false,"url":"https://api.github.com/repos/singh811/sample-repo","forks_url":"https://api.github.com/repos/singh811/sample-repo/forks","keys_url":"https://api.github.com/repos/singh811/sample-repo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/singh811/sample-repo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/singh811/sample-repo/teams","hooks_url":"https://api.github.com/repos/singh811/sample-repo/hooks","issue_events_url":"https://api.github.com/repos/singh811/sample-repo/issues/events{/number}","events_url":"https://api.github.com/repos/singh811/sample-repo/events","assignees_url":"https://api.github.com/repos/singh811/sample-repo/assignees{/user}","branches_url":"https://api.github.com/repos/singh811/sample-repo/branches{/branch}","tags_url":"https://api.github.com/repos/singh811/sample-repo/tags","blobs_url":"https://api.github.com/repos/singh811/sample-repo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/singh811/sample-repo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/singh811/sample-repo/git/refs{/sha}","trees_url":"https://api.github.com/repos/singh811/sample-repo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/singh811/sample-repo/statuses/{sha}","languages_url":"https://api.github.com/repos/singh811/sample-repo/languages","stargazers_url":"https://api.github.com/repos/singh811/sample-repo/stargazers","contributors_url":"https://api.github.com/repos/singh811/sample-repo/contributors","subscribers_url":"https://api.github.com/repos/singh811/sample-repo/subscribers","subscription_url":"https://api.github.com/repos/singh811/sample-repo/subscription","commits_url":"https://api.github.com/repos/singh811/sample-repo/commits{/sha}","git_commits_url":"https://api.github.com/repos/singh811/sample-repo/git/commits{/sha}","comments_url":"https://api.github.com/repos/singh811/sample-repo/comments{/number}","issue_comment_url":"https://api.github.com/repos/singh811/sample-repo/issues/comments{/number}","contents_url":"https://api.github.com/repos/singh811/sample-repo/contents/{+path}","compare_url":"https://api.github.com/repos/singh811/sample-repo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/singh811/sample-repo/merges","archive_url":"https://api.github.com/repos/singh811/sample-repo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/singh811/sample-repo/downloads","issues_url":"https://api.github.com/repos/singh811/sample-repo/issues{/number}","pulls_url":"https://api.github.com/repos/singh811/sample-repo/pulls{/number}","milestones_url":"https://api.github.com/repos/singh811/sample-repo/milestones{/number}","notifications_url":"https://api.github.com/repos/singh811/sample-repo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/singh811/sample-repo/labels{/name}","releases_url":"https://api.github.com/repos/singh811/sample-repo/releases{/id}","deployments_url":"https://api.github.com/repos/singh811/sample-repo/deployments","created_at":"2018-09-13T11:58:30Z","updated_at":"2018-09-13T20:05:35Z","pushed_at":"2018-09-13T11:58:31Z","git_url":"git://github.com/singh811/sample-repo.git","ssh_url":"git@github.com:singh811/sample-repo.git","clone_url":"https://github.com/singh811/sample-repo.git","svn_url":"https://github.com/singh811/sample-repo","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,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master","permissions":{"admin":true,"push":true,"pull":true}}],"url":"https://api.github.com/user/migrations/25320","archive_url":null,"created_at":"2018-09-14T01:35:35.000+05:30","updated_at":"2018-09-14T01:35:46.000+05:30"}] From 12aee39695f7f34523cc8ce547d89d8e0956f764 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 11:58:06 +0100 Subject: [PATCH 11/15] Sync Milestone class with API spec (#3148) Adds the following attributes: - closed_at - html_url - node_id --- github/Milestone.py | 24 ++++++++++++++++++ tests/Milestone.py | 25 ++++++++++--------- tests/ReplayData/Milestone.setUp.txt | 23 +++++------------ tests/ReplayData/Milestone.testDelete.txt | 2 +- .../Milestone.testEditWithAllParameters.txt | 4 +-- ...ilestone.testEditWithMinimalParameters.txt | 4 +-- tests/ReplayData/Milestone.testGetLabels.txt | 4 +-- 7 files changed, 50 insertions(+), 36 deletions(-) diff --git a/github/Milestone.py b/github/Milestone.py index 6b23b05596..0a64ef6a4f 100644 --- a/github/Milestone.py +++ b/github/Milestone.py @@ -67,13 +67,16 @@ class Milestone(CompletableGithubObject): """ def _initAttributes(self) -> None: + self._closed_at: Attribute[datetime] = NotSet self._closed_issues: Attribute[int] = NotSet self._created_at: Attribute[datetime] = NotSet self._creator: Attribute[github.NamedUser.NamedUser] = NotSet self._description: Attribute[str] = NotSet self._due_on: Attribute[datetime] = NotSet + self._html_url: Attribute[str] = NotSet self._id: Attribute[int] = NotSet self._labels_url: Attribute[str] = NotSet + self._node_id: Attribute[str] = NotSet self._number: Attribute[int] = NotSet self._open_issues: Attribute[int] = NotSet self._state: Attribute[str] = NotSet @@ -88,6 +91,11 @@ def __repr__(self) -> str: def _identity(self) -> int: return self.number + @property + def closed_at(self) -> datetime: + self._completeIfNotSet(self._closed_at) + return self._closed_at.value + @property def closed_issues(self) -> int: self._completeIfNotSet(self._closed_issues) @@ -113,6 +121,11 @@ def due_on(self) -> datetime | None: self._completeIfNotSet(self._due_on) return self._due_on.value + @property + def html_url(self) -> str: + self._completeIfNotSet(self._html_url) + return self._html_url.value + @property def id(self) -> int: self._completeIfNotSet(self._id) @@ -123,6 +136,11 @@ def labels_url(self) -> str: self._completeIfNotSet(self._labels_url) return self._labels_url.value + @property + def node_id(self) -> str: + self._completeIfNotSet(self._node_id) + return self._node_id.value + @property def number(self) -> int: self._completeIfNotSet(self._number) @@ -190,6 +208,8 @@ def get_labels(self) -> PaginatedList[github.Label.Label]: return PaginatedList(github.Label.Label, self._requester, f"{self.url}/labels", None) def _useAttributes(self, attributes: dict[str, Any]) -> None: + if "closed_at" in attributes: # pragma no branch + self._closed_at = self._makeDatetimeAttribute(attributes["closed_at"]) if "closed_issues" in attributes: # pragma no branch self._closed_issues = self._makeIntAttribute(attributes["closed_issues"]) if "created_at" in attributes: # pragma no branch @@ -200,10 +220,14 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._description = self._makeStringAttribute(attributes["description"]) if "due_on" in attributes: # pragma no branch self._due_on = self._makeDatetimeAttribute(attributes["due_on"]) + if "html_url" in attributes: # pragma no branch + self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) if "labels_url" in attributes: # pragma no branch self._labels_url = self._makeStringAttribute(attributes["labels_url"]) + if "node_id" in attributes: # pragma no branch + self._node_id = self._makeStringAttribute(attributes["node_id"]) if "number" in attributes: # pragma no branch self._number = self._makeIntAttribute(attributes["number"]) if "open_issues" in attributes: # pragma no branch diff --git a/tests/Milestone.py b/tests/Milestone.py index 89c43b29bc..5a61eef60c 100644 --- a/tests/Milestone.py +++ b/tests/Milestone.py @@ -33,6 +33,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import date, datetime, timezone from . import Framework @@ -41,28 +43,27 @@ class Milestone(Framework.TestCase): def setUp(self): super().setUp() - self.milestone = self.g.get_user().get_repo("PyGithub").get_milestone(1) + self.milestone = self.g.get_repo("PyGithub/PyGithub").get_milestone(1) def testAttributes(self): + self.assertEqual(self.milestone.closed_at, datetime(2012, 3, 12, 22, 18, 49, tzinfo=timezone.utc)) self.assertEqual(self.milestone.closed_issues, 2) - self.assertEqual( - self.milestone.created_at, - datetime(2012, 3, 8, 12, 22, 10, tzinfo=timezone.utc), - ) + self.assertEqual(self.milestone.created_at, datetime(2012, 3, 8, 12, 22, 10, tzinfo=timezone.utc)) + self.assertEqual(self.milestone.creator.login, "jacquev6") self.assertEqual(self.milestone.description, "") + self.assertEqual(self.milestone.due_on, datetime(2012, 3, 13, 7, 0, 0, tzinfo=timezone.utc)) + self.assertEqual(self.milestone.html_url, "https://github.com/PyGithub/PyGithub/milestone/1") + self.assertEqual(self.milestone.id, 93546) self.assertEqual( - self.milestone.due_on, - datetime(2012, 3, 13, 7, 0, 0, tzinfo=timezone.utc), + self.milestone.labels_url, "https://api.github.com/repos/PyGithub/PyGithub/milestones/1/labels" ) - self.assertEqual(self.milestone.id, 93546) + self.assertEqual(self.milestone.node_id, "MDk6TWlsZXN0b25lOTM1NDY=") self.assertEqual(self.milestone.number, 1) self.assertEqual(self.milestone.open_issues, 0) self.assertEqual(self.milestone.state, "closed") self.assertEqual(self.milestone.title, "Version 0.4") - self.assertEqual( - self.milestone.url, - "https://api.github.com/repos/jacquev6/PyGithub/milestones/1", - ) + self.assertEqual(self.milestone.updated_at, datetime(2012, 9, 11, 18, 48, 34, tzinfo=timezone.utc)) + self.assertEqual(self.milestone.url, "https://api.github.com/repos/PyGithub/PyGithub/milestones/1") self.assertEqual(self.milestone.creator.login, "jacquev6") self.assertEqual(repr(self.milestone), 'Milestone(title="Version 0.4", number=1)') diff --git a/tests/ReplayData/Milestone.setUp.txt b/tests/ReplayData/Milestone.setUp.txt index 7b0d539b72..a7d1af4a03 100644 --- a/tests/ReplayData/Milestone.setUp.txt +++ b/tests/ReplayData/Milestone.setUp.txt @@ -2,31 +2,20 @@ https GET api.github.com None -/user +/repos/PyGithub/PyGithub {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4999'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"cafcc970ccfa36947999605caefbe3be"'), ('date', 'Fri, 11 May 2012 13:34:48 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"type":"User","bio":"","url":"https://api.github.com/users/jacquev6","blog":"http://vincent-jacques.net","total_private_repos":5,"disk_usage":16676,"plan":{"collaborators":1,"space":614400,"name":"micro","private_repos":5},"public_gists":1,"html_url":"https://github.com/jacquev6","owned_private_repos":5,"public_repos":11,"login":"jacquev6","private_gists":5,"collaborators":0,"email":"vincent@vincent-jacques.net","created_at":"2010-07-09T06:10:06Z","company":"Criteo","location":"Paris, France","followers":13,"following":24,"name":"Vincent Jacques","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","hireable":false,"id":327146,"avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"} +[('Date', 'Fri, 03 Jan 2025 21:49:20 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"581c439a3aed8bca0c870e7f3ba3b1615b67e161e36dbf91afdf4c180a753f09"'), ('Last-Modified', 'Fri, 03 Jan 2025 18:50:01 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4999'), ('X-RateLimit-Reset', '1735944560'), ('X-RateLimit-Used', '1'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '92F0:4DB83:217F2204:2264C2BD:67785B60')] +{"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","user_view_type":"public","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":"2025-01-03T18:50:01Z","pushed_at":"2024-12-19T12:01:11Z","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":16425,"stargazers_count":7117,"watchers_count":7117,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1792,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":356,"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":1792,"open_issues":356,"watchers":7117,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":false,"allow_rebase_merge":false,"allow_auto_merge":false,"delete_branch_on_merge":true,"allow_update_branch":true,"use_squash_pr_title_as_default":true,"squash_merge_commit_message":"PR_BODY","squash_merge_commit_title":"PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","custom_properties":{},"organization":{"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","user_view_type":"public","site_admin":false},"security_and_analysis":{"secret_scanning":{"status":"disabled"},"secret_scanning_push_protection":{"status":"disabled"},"dependabot_security_updates":{"status":"enabled"},"secret_scanning_non_provider_patterns":{"status":"disabled"},"secret_scanning_validity_checks":{"status":"disabled"}},"network_count":1792,"subscribers_count":111} https GET api.github.com None -/repos/jacquev6/PyGithub +/repos/PyGithub/PyGithub/milestones/1 {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4998'), ('content-length', '1097'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"4a386c2ab2675e1e0addb729b4576ea9"'), ('date', 'Fri, 11 May 2012 13:34:49 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"updated_at":"2012-05-10T20:00:24Z","has_wiki":false,"has_issues":true,"homepage":"http://vincent-jacques.net/PyGithub","git_url":"git://github.com/jacquev6/PyGithub.git","mirror_url":null,"forks":2,"html_url":"https://github.com/jacquev6/PyGithub","open_issues":15,"fork":false,"svn_url":"https://github.com/jacquev6/PyGithub","ssh_url":"git@github.com:jacquev6/PyGithub.git","url":"https://api.github.com/repos/jacquev6/PyGithub","pushed_at":"2012-05-10T20:00:24Z","language":"Python","size":196,"private":false,"clone_url":"https://github.com/jacquev6/PyGithub.git","created_at":"2012-02-25T12:53:47Z","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,"watchers":13,"description":"Python library implementing the full Github API v3","id":3544490,"permissions":{"admin":true,"pull":true,"push":true}} - -https -GET -api.github.com -None -/repos/jacquev6/PyGithub/milestones/1 -{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4997'), ('content-length', '556'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"977ee5e1d9c368036c6121e01680ce45"'), ('date', 'Fri, 11 May 2012 13:34:49 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/1","number":1,"closed_issues":2,"title":"Version 0.4","due_on":"2012-03-13T07:00:00Z","created_at":"2012-03-08T12:22:10Z","state":"closed","creator":{"url":"https://api.github.com/users/jacquev6","login":"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","id":327146},"description":"","open_issues":0,"id":93546} +[('Date', 'Fri, 03 Jan 2025 21:49:21 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"5d26cc4d2ba7e9af18090425bf8491d09d6ebce7d5d5540960ba2a66b4b309d0"'), ('Last-Modified', 'Sun, 20 Oct 2024 07:14:52 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1735944560'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '92F6:4E297:23BC472B:24A1E8E2:67785B60')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/1","html_url":"https://github.com/PyGithub/PyGithub/milestone/1","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/1/labels","id":93546,"node_id":"MDk6TWlsZXN0b25lOTM1NDY=","number":1,"title":"Version 0.4","description":"","creator":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"open_issues":0,"closed_issues":2,"state":"closed","created_at":"2012-03-08T12:22:10Z","updated_at":"2012-09-11T18:48:34Z","due_on":"2012-03-13T07:00:00Z","closed_at":"2012-03-12T22:18:49Z"} diff --git a/tests/ReplayData/Milestone.testDelete.txt b/tests/ReplayData/Milestone.testDelete.txt index f3640067ff..e4ee811862 100644 --- a/tests/ReplayData/Milestone.testDelete.txt +++ b/tests/ReplayData/Milestone.testDelete.txt @@ -2,7 +2,7 @@ https DELETE api.github.com None -/repos/jacquev6/PyGithub/milestones/1 +/repos/PyGithub/PyGithub/milestones/1 {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 204 diff --git a/tests/ReplayData/Milestone.testEditWithAllParameters.txt b/tests/ReplayData/Milestone.testEditWithAllParameters.txt index ce7be1dffa..0e3fff3368 100644 --- a/tests/ReplayData/Milestone.testEditWithAllParameters.txt +++ b/tests/ReplayData/Milestone.testEditWithAllParameters.txt @@ -2,9 +2,9 @@ https PATCH api.github.com None -/repos/jacquev6/PyGithub/milestones/1 +/repos/PyGithub/PyGithub/milestones/1 {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} {"due_on": "2012-06-16", "state": "closed", "description": "Description edited by PyGithub", "title": "Title edited twice by PyGithub"} 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4946'), ('content-length', '606'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"ac9f76c61e1fe0e76cd26e77e59d5797"'), ('date', 'Sat, 19 May 2012 10:30:15 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/5","due_on":"2012-06-16T07:00:00Z","creator":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146},"number":5,"open_issues":0,"title":"Title edited twice by PyGithub","closed_issues":0,"created_at":"2012-05-19T10:24:13Z","state":"closed","description":"Description edited by PyGithub","id":121463} +{"url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/5","due_on":"2012-06-16T07:00:00Z","creator":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146},"number":5,"open_issues":0,"title":"Title edited twice by PyGithub","closed_issues":0,"created_at":"2012-05-19T10:24:13Z","state":"closed","description":"Description edited by PyGithub","id":121463} diff --git a/tests/ReplayData/Milestone.testEditWithMinimalParameters.txt b/tests/ReplayData/Milestone.testEditWithMinimalParameters.txt index 092b06a82d..41fe28056e 100644 --- a/tests/ReplayData/Milestone.testEditWithMinimalParameters.txt +++ b/tests/ReplayData/Milestone.testEditWithMinimalParameters.txt @@ -2,9 +2,9 @@ https PATCH api.github.com None -/repos/jacquev6/PyGithub/milestones/1 +/repos/PyGithub/PyGithub/milestones/1 {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} {"title": "Title edited by PyGithub"} 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4954'), ('content-length', '599'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"df00dd4d1183f48c313b9cf04330623b"'), ('date', 'Sat, 19 May 2012 10:29:02 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"closed_issues":0,"url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/5","due_on":"2012-06-15T07:00:00Z","creator":{"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","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"number":5,"open_issues":0,"title":"Title edited by PyGithub","created_at":"2012-05-19T10:24:13Z","state":"open","description":"Description created by PyGithub","id":121463} +{"closed_issues":0,"url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/5","due_on":"2012-06-15T07:00:00Z","creator":{"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","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"number":5,"open_issues":0,"title":"Title edited by PyGithub","created_at":"2012-05-19T10:24:13Z","state":"open","description":"Description created by PyGithub","id":121463} diff --git a/tests/ReplayData/Milestone.testGetLabels.txt b/tests/ReplayData/Milestone.testGetLabels.txt index 01cb395a95..1725ef4889 100644 --- a/tests/ReplayData/Milestone.testGetLabels.txt +++ b/tests/ReplayData/Milestone.testGetLabels.txt @@ -2,9 +2,9 @@ https GET api.github.com None -/repos/jacquev6/PyGithub/milestones/1/labels +/repos/PyGithub/PyGithub/milestones/1/labels {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4942'), ('content-length', '253'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"cd4ed3176e27a01da9a51f84c7b19b63"'), ('date', 'Sat, 19 May 2012 10:33:15 GMT'), ('content-type', 'application/json; charset=utf-8')] -[{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/Public+interface","name":"Public interface","color":"d7e102"},{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/Project+management","name":"Project management","color":"444444"}] +[{"url":"https://api.github.com/repos/PyGithub/PyGithub/labels/Public+interface","name":"Public interface","color":"d7e102"},{"url":"https://api.github.com/repos/PyGithub/PyGithub/labels/Project+management","name":"Project management","color":"444444"}] From 0df2e39483879783674afca5a6374efb582626c4 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 11:58:11 +0100 Subject: [PATCH 12/15] Sync Invitation class with API spec (#3139) Adds the following attributes: - expired - node_id --- github/Invitation.py | 16 ++++++++++++++++ tests/AuthenticatedUser.py | 2 ++ .../AuthenticatedUser.testGetInvitations.txt | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/github/Invitation.py b/github/Invitation.py index cd2b24f402..27d3df31f2 100644 --- a/github/Invitation.py +++ b/github/Invitation.py @@ -67,10 +67,12 @@ class Invitation(CompletableGithubObject): def _initAttributes(self) -> None: self._created_at: Attribute[datetime] = NotSet + self._expired: Attribute[bool] = NotSet self._html_url: Attribute[str] = NotSet self._id: Attribute[int] = NotSet self._invitee: Attribute[NamedUser] = NotSet self._inviter: Attribute[NamedUser] = NotSet + self._node_id: Attribute[str] = NotSet self._permissions: Attribute[str] = NotSet self._repository: Attribute[Repository] = NotSet self._url: Attribute[str] = NotSet @@ -83,6 +85,11 @@ def created_at(self) -> datetime: self._completeIfNotSet(self._created_at) return self._created_at.value + @property + def expired(self) -> bool: + self._completeIfNotSet(self._expired) + return self._expired.value + @property def html_url(self) -> str: self._completeIfNotSet(self._html_url) @@ -103,6 +110,11 @@ def inviter(self) -> NamedUser: self._completeIfNotSet(self._inviter) return self._inviter.value + @property + def node_id(self) -> str: + self._completeIfNotSet(self._node_id) + return self._node_id.value + @property def permissions(self) -> str: self._completeIfNotSet(self._permissions) @@ -121,6 +133,8 @@ def url(self) -> str: def _useAttributes(self, attributes: dict[str, Any]) -> None: if "created_at" in attributes: # pragma no branch self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) + if "expired" in attributes: # pragma no branch + self._expired = self._makeBoolAttribute(attributes["expired"]) if "html_url" in attributes: # pragma no branch self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch @@ -129,6 +143,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._invitee = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["invitee"]) if "inviter" in attributes: # pragma no branch self._inviter = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["inviter"]) + if "node_id" in attributes: # pragma no branch + self._node_id = self._makeStringAttribute(attributes["node_id"]) if "permissions" in attributes: # pragma no branch self._permissions = self._makeStringAttribute(attributes["permissions"]) diff --git a/tests/AuthenticatedUser.py b/tests/AuthenticatedUser.py index d4e0da8d83..3c31787c4f 100644 --- a/tests/AuthenticatedUser.py +++ b/tests/AuthenticatedUser.py @@ -762,11 +762,13 @@ def testGetInvitations(self): self.assertEqual(invitation.permissions, "write") created_at = datetime(2019, 6, 27, 11, 47, tzinfo=timezone.utc) self.assertEqual(invitation.created_at, created_at) + self.assertEqual(invitation.expired, True) self.assertEqual( invitation.url, "https://api.github.com/user/repository_invitations/17285388", ) self.assertEqual(invitation.html_url, "https://github.com/jacquev6/PyGithub/invitations") + self.assertEqual(invitation.node_id, "MDIwOlJlcG9zaXRvcnlJbnZpdGF0aW9uMTcyODUzODg=") self.assertEqual(invitation.repository.name, "PyGithub") self.assertEqual(invitation.invitee.login, "foobar-test1") self.assertEqual(invitation.inviter.login, "jacquev6") diff --git a/tests/ReplayData/AuthenticatedUser.testGetInvitations.txt b/tests/ReplayData/AuthenticatedUser.testGetInvitations.txt index 84082582c1..255629a1be 100644 --- a/tests/ReplayData/AuthenticatedUser.testGetInvitations.txt +++ b/tests/ReplayData/AuthenticatedUser.testGetInvitations.txt @@ -7,4 +7,4 @@ None None 200 [('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('etag', 'W/"35a3bb21f0a95b0eb36e9c82b157f5da"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('status', '200 OK'), ('x-ratelimit-remaining', '4998'), ('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'), ('transfer-encoding', 'chunked'), ('date', 'Thu, 27 Jun 2019 11:53:53 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('content-encoding', 'gzip'), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1561640033')] -[{"node_id":"MDIwOlJlcG9zaXRvcnlJbnZpdGF0aW9uMTcyODUzODg=","repository":{"deployments_url":"https://api.github.com/repos/jacquev6/PyGithub/deployments","forks_url":"https://api.github.com/repos/jacquev6/PyGithub/forks","subscription_url":"https://api.github.com/repos/jacquev6/PyGithub/subscription","collaborators_url":"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}","private":false,"owner":{"disk_usage":16692,"total_private_repos":5,"gravatar_id":"b68de5ae38616c296fa345d2b9df2225","hireable":false,"id":327146,"blog":"http://vincent-jacques.net","followers":13,"location":"Paris,France","type":"User","email":"vincent@vincent-jacques.net","private_gists":5,"owned_private_repos":5,"company":"Criteo","html_url":"https://github.com/jacquev6","node_id":"MDQ6VXNlcjMyNzE0Ng==","plan":{"collaborators":1,"name":"micro","private_repos":5,"space":614400},"bio":"","public_gists":1,"collaborators":0,"name":"VincentJacques","url":"https://api.github.com/users/jacquev6","created_at":"2010-07-09T06:10:06Z","public_repos":10,"avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","following":24,"login":"jacquev6"},"tags_url":"https://api.github.com/repos/jacquev6/PyGithub/tags","contributors_url":"https://api.github.com/repos/jacquev6/PyGithub/contributors","downloads_url":"https://api.github.com/repos/jacquev6/PyGithub/downloads","git_tags_url":"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}","languages_url":"https://api.github.com/repos/jacquev6/PyGithub/languages","fork":true,"releases_url":"https://api.github.com/repos/jacquev6/PyGithub/releases{/id}","labels_url":"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}","events_url":"https://api.github.com/repos/jacquev6/PyGithub/events","html_url":"https://github.com/jacquev6/PyGithub","compare_url":"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jacquev6/PyGithub/merges","blobs_url":"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}","name":"PyGithub","git_commits_url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/jacquev6/PyGithub/subscribers","issues_url":"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}","issue_comment_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/comments{/number}","full_name":"jacquev6/PyGithub","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}","id":129349732,"keys_url":"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}","issue_events_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}","assignees_url":"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}","statuses_url":"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}","git_refs_url":"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}","commits_url":"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}","description":"TypedinteractionswiththeGitHubAPIv3","archive_url":"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}","milestones_url":"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}","node_id":"MDEwOlJlcG9zaXRvcnkxMjkzNDk3MzI=","notifications_url":"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}","branches_url":"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}","hooks_url":"https://api.github.com/repos/jacquev6/PyGithub/hooks","url":"https://api.github.com/repos/jacquev6/PyGithub","teams_url":"https://api.github.com/repos/jacquev6/PyGithub/teams","trees_url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}","stargazers_url":"https://api.github.com/repos/jacquev6/PyGithub/stargazers"},"permissions":"write","url":"https://api.github.com/user/repository_invitations/17285388","created_at":"2019-06-27T11:47:00Z","invitee":{"following_url":"https://api.github.com/users/foobar-test1/following{/other_user}","gists_url":"https://api.github.com/users/foobar-test1/gists{/gist_id}","organizations_url":"https://api.github.com/users/foobar-test1/orgs","url":"https://api.github.com/users/foobar-test1","events_url":"https://api.github.com/users/foobar-test1/events{/privacy}","html_url":"https://github.com/foobar-test1","subscriptions_url":"https://api.github.com/users/foobar-test1/subscriptions","avatar_url":"https://avatars3.githubusercontent.com/u/52282986?v=4","repos_url":"https://api.github.com/users/foobar-test1/repos","received_events_url":"https://api.github.com/users/foobar-test1/received_events","gravatar_id":"","starred_url":"https://api.github.com/users/foobar-test1/starred{/owner}{/repo}","site_admin":false,"login":"foobar-test1","node_id":"MDQ6VXNlcjUyMjgyOTg2","type":"User","id":52282986,"followers_url":"https://api.github.com/users/foobar-test1/followers"},"inviter":{"disk_usage":16692,"total_private_repos":5,"gravatar_id":"b68de5ae38616c296fa345d2b9df2225","hireable":false,"id":327146,"blog":"http://vincent-jacques.net","followers":13,"location":"Paris,France","type":"User","email":"vincent@vincent-jacques.net","private_gists":5,"owned_private_repos":5,"company":"Criteo","html_url":"https://github.com/jacquev6","node_id":"MDQ6VXNlcjMyNzE0Ng==","plan":{"collaborators":1,"name":"micro","private_repos":5,"space":614400},"bio":"","public_gists":1,"collaborators":0,"name":"VincentJacques","url":"https://api.github.com/users/jacquev6","created_at":"2010-07-09T06:10:06Z","public_repos":10,"avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","following":24,"login":"jacquev6"},"html_url":"https://github.com/jacquev6/PyGithub/invitations","id":17285388}] +[{"node_id":"MDIwOlJlcG9zaXRvcnlJbnZpdGF0aW9uMTcyODUzODg=","repository":{"deployments_url":"https://api.github.com/repos/jacquev6/PyGithub/deployments","forks_url":"https://api.github.com/repos/jacquev6/PyGithub/forks","subscription_url":"https://api.github.com/repos/jacquev6/PyGithub/subscription","collaborators_url":"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}","private":false,"owner":{"disk_usage":16692,"total_private_repos":5,"gravatar_id":"b68de5ae38616c296fa345d2b9df2225","hireable":false,"id":327146,"blog":"http://vincent-jacques.net","followers":13,"location":"Paris,France","type":"User","email":"vincent@vincent-jacques.net","private_gists":5,"owned_private_repos":5,"company":"Criteo","html_url":"https://github.com/jacquev6","node_id":"MDQ6VXNlcjMyNzE0Ng==","plan":{"collaborators":1,"name":"micro","private_repos":5,"space":614400},"bio":"","public_gists":1,"collaborators":0,"name":"VincentJacques","url":"https://api.github.com/users/jacquev6","created_at":"2010-07-09T06:10:06Z","public_repos":10,"avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","following":24,"login":"jacquev6"},"tags_url":"https://api.github.com/repos/jacquev6/PyGithub/tags","contributors_url":"https://api.github.com/repos/jacquev6/PyGithub/contributors","downloads_url":"https://api.github.com/repos/jacquev6/PyGithub/downloads","git_tags_url":"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}","languages_url":"https://api.github.com/repos/jacquev6/PyGithub/languages","fork":true,"releases_url":"https://api.github.com/repos/jacquev6/PyGithub/releases{/id}","labels_url":"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}","events_url":"https://api.github.com/repos/jacquev6/PyGithub/events","html_url":"https://github.com/jacquev6/PyGithub","compare_url":"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jacquev6/PyGithub/merges","blobs_url":"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}","name":"PyGithub","git_commits_url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/jacquev6/PyGithub/subscribers","issues_url":"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}","issue_comment_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/comments{/number}","full_name":"jacquev6/PyGithub","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}","id":129349732,"keys_url":"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}","issue_events_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}","assignees_url":"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}","statuses_url":"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}","git_refs_url":"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}","commits_url":"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}","description":"TypedinteractionswiththeGitHubAPIv3","archive_url":"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}","milestones_url":"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}","node_id":"MDEwOlJlcG9zaXRvcnkxMjkzNDk3MzI=","notifications_url":"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}","branches_url":"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}","hooks_url":"https://api.github.com/repos/jacquev6/PyGithub/hooks","url":"https://api.github.com/repos/jacquev6/PyGithub","teams_url":"https://api.github.com/repos/jacquev6/PyGithub/teams","trees_url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}","stargazers_url":"https://api.github.com/repos/jacquev6/PyGithub/stargazers"},"permissions":"write","url":"https://api.github.com/user/repository_invitations/17285388","created_at":"2019-06-27T11:47:00Z","expired":true,"invitee":{"following_url":"https://api.github.com/users/foobar-test1/following{/other_user}","gists_url":"https://api.github.com/users/foobar-test1/gists{/gist_id}","organizations_url":"https://api.github.com/users/foobar-test1/orgs","url":"https://api.github.com/users/foobar-test1","events_url":"https://api.github.com/users/foobar-test1/events{/privacy}","html_url":"https://github.com/foobar-test1","subscriptions_url":"https://api.github.com/users/foobar-test1/subscriptions","avatar_url":"https://avatars3.githubusercontent.com/u/52282986?v=4","repos_url":"https://api.github.com/users/foobar-test1/repos","received_events_url":"https://api.github.com/users/foobar-test1/received_events","gravatar_id":"","starred_url":"https://api.github.com/users/foobar-test1/starred{/owner}{/repo}","site_admin":false,"login":"foobar-test1","node_id":"MDQ6VXNlcjUyMjgyOTg2","type":"User","id":52282986,"followers_url":"https://api.github.com/users/foobar-test1/followers"},"inviter":{"disk_usage":16692,"total_private_repos":5,"gravatar_id":"b68de5ae38616c296fa345d2b9df2225","hireable":false,"id":327146,"blog":"http://vincent-jacques.net","followers":13,"location":"Paris,France","type":"User","email":"vincent@vincent-jacques.net","private_gists":5,"owned_private_repos":5,"company":"Criteo","html_url":"https://github.com/jacquev6","node_id":"MDQ6VXNlcjMyNzE0Ng==","plan":{"collaborators":1,"name":"micro","private_repos":5,"space":614400},"bio":"","public_gists":1,"collaborators":0,"name":"VincentJacques","url":"https://api.github.com/users/jacquev6","created_at":"2010-07-09T06:10:06Z","public_repos":10,"avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","following":24,"login":"jacquev6"},"html_url":"https://github.com/jacquev6/PyGithub/invitations","id":17285388}] From bb3353b46cccf65bd2d1ae0a4a944434a83297e8 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 11:58:25 +0100 Subject: [PATCH 13/15] Sync IssueComment class with API spec (#3141) Adds the following attributes: - author_association - body_html - body_text - performed_via_github_app --- github/IssueComment.py | 41 +++++++++++- tests/IssueComment.py | 67 +++++++++++-------- tests/ReplayData/IssueComment.setUp.txt | 29 +++----- .../IssueComment.testCreateReaction.txt | 2 +- tests/ReplayData/IssueComment.testDelete.txt | 2 +- .../IssueComment.testDeleteReaction.txt | 2 +- tests/ReplayData/IssueComment.testEdit.txt | 4 +- .../IssueComment.testGetReactions.txt | 2 +- .../ReplayData/IssueComment.testMinimize.txt | 2 +- .../IssueComment.testUnminimize.txt | 2 +- 10 files changed, 95 insertions(+), 58 deletions(-) diff --git a/github/IssueComment.py b/github/IssueComment.py index cdd22c3360..c035f0ea95 100644 --- a/github/IssueComment.py +++ b/github/IssueComment.py @@ -49,6 +49,7 @@ from datetime import datetime from typing import TYPE_CHECKING, Any +import github.GithubApp import github.GithubObject import github.NamedUser from github import Consts @@ -56,6 +57,8 @@ from github.PaginatedList import PaginatedList if TYPE_CHECKING: + from github.GithubApp import GithubApp + from github.NamedUser import NamedUser from github.Reaction import Reaction @@ -72,25 +75,44 @@ class IssueComment(CompletableGithubObject): """ def _initAttributes(self) -> None: + self._author_association: Attribute[str] = NotSet self._body: Attribute[str] = NotSet + self._body_html: Attribute[str] = NotSet + self._body_text: Attribute[str] = NotSet self._created_at: Attribute[datetime] = NotSet self._html_url: Attribute[str] = NotSet self._id: Attribute[int] = NotSet self._issue_url: Attribute[str] = NotSet self._node_id: Attribute[str] = NotSet + self._performed_via_github_app: Attribute[GithubApp] = NotSet self._reactions: Attribute[dict] = NotSet self._updated_at: Attribute[datetime] = NotSet self._url: Attribute[str] = NotSet - self._user: Attribute[github.NamedUser.NamedUser] = NotSet + self._user: Attribute[NamedUser] = NotSet def __repr__(self) -> str: return self.get__repr__({"id": self._id.value, "user": self._user.value}) + @property + def author_association(self) -> str: + self._completeIfNotSet(self._author_association) + return self._author_association.value + @property def body(self) -> str: self._completeIfNotSet(self._body) return self._body.value + @property + def body_html(self) -> str: + self._completeIfNotSet(self._body_html) + return self._body_html.value + + @property + def body_text(self) -> str: + self._completeIfNotSet(self._body_text) + return self._body_text.value + @property def created_at(self) -> datetime: self._completeIfNotSet(self._created_at) @@ -116,6 +138,11 @@ def node_id(self) -> str: self._completeIfNotSet(self._node_id) return self._node_id.value + @property + def performed_via_github_app(self) -> GithubApp: + self._completeIfNotSet(self._performed_via_github_app) + return self._performed_via_github_app.value + @property def reactions(self) -> dict: self._completeIfNotSet(self._reactions) @@ -132,7 +159,7 @@ def url(self) -> str: return self._url.value @property - def user(self) -> github.NamedUser.NamedUser: + def user(self) -> NamedUser: self._completeIfNotSet(self._user) return self._user.value @@ -229,8 +256,14 @@ def unminimize(self) -> bool: return data["unminimizedComment"]["isMinimized"] is False def _useAttributes(self, attributes: dict[str, Any]) -> None: + if "author_association" in attributes: # pragma no branch + self._author_association = self._makeStringAttribute(attributes["author_association"]) if "body" in attributes: # pragma no branch self._body = self._makeStringAttribute(attributes["body"]) + if "body_html" in attributes: # pragma no branch + self._body_html = self._makeStringAttribute(attributes["body_html"]) + if "body_text" in attributes: # pragma no branch + self._body_text = self._makeStringAttribute(attributes["body_text"]) if "created_at" in attributes: # pragma no branch self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "html_url" in attributes: # pragma no branch @@ -241,6 +274,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._issue_url = self._makeStringAttribute(attributes["issue_url"]) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) + if "performed_via_github_app" in attributes: # pragma no branch + self._performed_via_github_app = self._makeClassAttribute( + github.GithubApp.GithubApp, attributes["performed_via_github_app"] + ) if "reactions" in attributes: self._reactions = self._makeDictAttribute(attributes["reactions"]) if "updated_at" in attributes: # pragma no branch diff --git a/tests/IssueComment.py b/tests/IssueComment.py index 0e2eb6f619..42d4e8675e 100644 --- a/tests/IssueComment.py +++ b/tests/IssueComment.py @@ -37,6 +37,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timezone from . import Framework @@ -45,46 +47,55 @@ class IssueComment(Framework.TestCase): def setUp(self): super().setUp() - self.comment = self.g.get_user().get_repo("PyGithub").get_issue(28).get_comment(5808311) + self.comment = self.g.get_repo("PyGithub/PyGithub").get_issue(28).get_comment(20227753) def testAttributes(self): - self.assertEqual(self.comment.node_id, "IC_kwDOGpsAJ86Gecc_") - self.assertEqual(self.comment.body, "Comment created by PyGithub") - self.assertEqual( - self.comment.created_at, - datetime(2012, 5, 20, 11, 46, 42, tzinfo=timezone.utc), - ) - self.assertEqual(self.comment.id, 5808311) - self.assertEqual( - self.comment.updated_at, - datetime(2012, 5, 20, 11, 46, 42, tzinfo=timezone.utc), - ) - self.assertEqual( - self.comment.url, - "https://api.github.com/repos/jacquev6/PyGithub/issues/comments/5808311", - ) - self.assertEqual(self.comment.user.login, "jacquev6") + self.assertEqual(self.comment.author_association, "CONTRIBUTOR") + self.assertEqual(self.comment.body, "Comment created by PyGithub\n") + self.assertIsNone(self.comment.body_html) + self.assertIsNone(self.comment.body_text) + self.assertEqual(self.comment.created_at, datetime(2013, 6, 29, 10, 31, 38, tzinfo=timezone.utc)) + self.assertEqual(self.comment.html_url, "https://github.com/PyGithub/PyGithub/issues/28#issuecomment-20227753") + self.assertEqual(self.comment.id, 20227753) + self.assertEqual(self.comment.issue_url, "https://api.github.com/repos/PyGithub/PyGithub/issues/28") + self.assertEqual(self.comment.node_id, "MDEyOklzc3VlQ29tbWVudDIwMjI3NzUz") + self.assertEqual(self.comment.body, "Comment created by PyGithub\n") + self.assertEqual(self.comment.created_at, datetime(2013, 6, 29, 10, 31, 38, tzinfo=timezone.utc)) + self.assertEqual(self.comment.id, 20227753) + self.assertIsNone(self.comment.performed_via_github_app) self.assertEqual( - self.comment.html_url, - "https://github.com/jacquev6/PyGithub/issues/28#issuecomment-5808311", - ) - self.assertEqual( - repr(self.comment), - 'IssueComment(user=NamedUser(login="jacquev6"), id=5808311)', + self.comment.reactions, + { + "url": "https://api.github.com/repos/PyGithub/PyGithub/issues/comments/20227753/reactions", + "total_count": 2, + "+1": 1, + "-1": 0, + "laugh": 0, + "hooray": 1, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0, + }, ) + self.assertEqual(self.comment.updated_at, datetime(2013, 6, 29, 10, 31, 38, tzinfo=timezone.utc)) + self.assertEqual(self.comment.url, "https://api.github.com/repos/PyGithub/PyGithub/issues/comments/20227753") + self.assertEqual(self.comment.user.login, "stuglaser") + self.assertEqual(self.comment.html_url, "https://github.com/PyGithub/PyGithub/issues/28#issuecomment-20227753") + self.assertEqual(repr(self.comment), 'IssueComment(user=NamedUser(login="stuglaser"), id=20227753)') self.assertEqual( self.comment.reactions, { + "url": "https://api.github.com/repos/PyGithub/PyGithub/issues/comments/20227753/reactions", + "total_count": 2, "+1": 1, "-1": 0, + "laugh": 0, + "hooray": 1, "confused": 0, - "eyes": 0, "heart": 0, - "hooray": 1, - "laugh": 0, "rocket": 0, - "total_count": 2, - "url": "https://api.github.com/repos/jacquev6/PyGithub/issues/comments/5808311/reactions", + "eyes": 0, }, ) diff --git a/tests/ReplayData/IssueComment.setUp.txt b/tests/ReplayData/IssueComment.setUp.txt index 8d43fffc16..de7ed3576a 100644 --- a/tests/ReplayData/IssueComment.setUp.txt +++ b/tests/ReplayData/IssueComment.setUp.txt @@ -2,42 +2,31 @@ https GET api.github.com None -/user +/repos/PyGithub/PyGithub {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4993'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"9459b6e1e4805aad5e10d13344d6ffbf"'), ('date', 'Sat, 26 May 2012 14:59:39 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"public_repos":11,"type":"User","hireable":false,"disk_usage":17080,"blog":"http://vincent-jacques.net","bio":"","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","total_private_repos":5,"plan":{"private_repos":5,"collaborators":1,"name":"micro","space":614400},"owned_private_repos":5,"company":"Criteo","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","collaborators":0,"public_gists":3,"email":"vincent@vincent-jacques.net","followers":13,"name":"Vincent Jacques","private_gists":5,"created_at":"2010-07-09T06:10:06Z","location":"Paris, France","id":327146,"following":24,"html_url":"https://github.com/jacquev6"} +[('Date', 'Fri, 03 Jan 2025 20:15:21 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"f5cc8602b1810af03dbb6c6362f001a1e6360ddab7e5169b030d5cb0e172da51"'), ('Last-Modified', 'Fri, 03 Jan 2025 18:50:01 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '4'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E454:47716:2474086A:25582295:67784559')] +{"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","user_view_type":"public","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":"2025-01-03T18:50:01Z","pushed_at":"2024-12-19T12:01:11Z","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":16425,"stargazers_count":7117,"watchers_count":7117,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1793,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":356,"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":1793,"open_issues":356,"watchers":7117,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":false,"allow_rebase_merge":false,"allow_auto_merge":false,"delete_branch_on_merge":true,"allow_update_branch":true,"use_squash_pr_title_as_default":true,"squash_merge_commit_message":"PR_BODY","squash_merge_commit_title":"PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","custom_properties":{},"organization":{"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","user_view_type":"public","site_admin":false},"security_and_analysis":{"secret_scanning":{"status":"disabled"},"secret_scanning_push_protection":{"status":"disabled"},"dependabot_security_updates":{"status":"enabled"},"secret_scanning_non_provider_patterns":{"status":"disabled"},"secret_scanning_validity_checks":{"status":"disabled"}},"network_count":1793,"subscribers_count":111} https GET api.github.com None -/repos/jacquev6/PyGithub +/repos/PyGithub/PyGithub/issues/28 {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4992'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"5dc65a168cf4d957347ea04221cd5102"'), ('date', 'Sat, 26 May 2012 14:59:39 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:25:48Z","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":2,"size":412,"private":false,"open_issues":15,"svn_url":"https://github.com/jacquev6/PyGithub","owner":{"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"},"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-26T11:25:48Z","created_at":"2012-02-25T12:53:47Z","id":3544490,"git_url":"git://github.com/jacquev6/PyGithub.git","html_url":"https://github.com/jacquev6/PyGithub","full_name":"jacquev6/PyGithub"} +[('Date', 'Fri, 03 Jan 2025 20:15:22 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"4f9f2e3ae3fbedf89903cc5b9b41c547de19b5604d701a91684de32048920575"'), ('Last-Modified', 'Sun, 20 Oct 2024 07:14:52 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '5'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E45E:7CD91:22BE540A:23A26FDD:67784559')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/events","html_url":"https://github.com/PyGithub/PyGithub/issues/28","id":4653757,"node_id":"MDU6SXNzdWU0NjUzNzU3","number":28,"title":"Issue created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"labels":[{"id":3330121,"node_id":"MDU6TGFiZWwzMzMwMTIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/bug","name":"bug","color":"e10c02","default":true,"description":null},{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true,"description":null}],"state":"closed","locked":false,"assignee":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"assignees":[{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/8","html_url":"https://github.com/PyGithub/PyGithub/milestone/8","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/8/labels","id":150933,"node_id":"MDk6TWlsZXN0b25lMTUwOTMz","number":8,"title":"Version 1.4","description":"","creator":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"open_issues":0,"closed_issues":3,"state":"closed","created_at":"2012-07-24T16:04:28Z","updated_at":"2012-09-11T18:52:13Z","due_on":"2012-08-05T07:00:00Z","closed_at":"2012-08-04T06:11:43Z"},"comments":3,"created_at":"2012-05-19T10:38:23Z","updated_at":"2019-05-03T09:44:22Z","closed_at":"2012-05-26T14:59:33Z","author_association":"MEMBER","active_lock_reason":null,"body":"Body edited by PyGithub\n","closed_by":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false},"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/reactions","total_count":2,"+1":0,"-1":0,"laugh":0,"hooray":2,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/timeline","performed_via_github_app":null,"state_reason":"completed"} https GET api.github.com None -/repos/jacquev6/PyGithub/issues/28 +/repos/PyGithub/PyGithub/issues/comments/20227753 {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4991'), ('content-length', '2258'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"071cb2b8bfef81f56b94d7d9397e6aa4"'), ('date', 'Sat, 26 May 2012 14:59:40 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"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","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"},"url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/1","number":1,"title":"Version 0.4","due_on":"2012-03-13T07:00:00Z","open_issues":0,"created_at":"2012-03-08T12:22:10Z","state":"closed","description":"","id":93546,"closed_issues":3},"number":28,"closed_by":{"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"},"assignee":{"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"},"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","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":4653757,"pull_request":{"patch_url":null,"diff_url":null,"html_url":null},"html_url":"https://github.com/jacquev6/PyGithub/issues/28"} - -https -GET -api.github.com -None -/repos/jacquev6/PyGithub/issues/comments/5808311 -{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4985'), ('content-length', '506'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"4fa1a8e8e534bcc93123ea6ee8fd4284"'), ('date', 'Sun, 20 May 2012 11:50:56 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"node_id": "IC_kwDOGpsAJ86Gecc_","updated_at":"2012-05-20T11:46:42Z","body":"Comment created by PyGithub","url":"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/5808311","created_at":"2012-05-20T11:46:42Z","user":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146},"id":5808311,"html_url":"https://github.com/jacquev6/PyGithub/issues/28#issuecomment-5808311","reactions":{"url":"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/5808311/reactions","total_count":2,"+1":1,"-1":0,"laugh":0,"hooray":1,"confused":0,"heart":0,"rocket":0,"eyes":0}} +[('Date', 'Fri, 03 Jan 2025 20:15:22 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"06c63805d93f4e1b6dbbaeaa1b30b3ccf26cdab452e95278b3926f453bca2426"'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4994'), ('X-RateLimit-Reset', '1735938877'), ('X-RateLimit-Used', '6'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E468:5A83E:2199C6B2:227DE3C3:6778455A')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/20227753","html_url":"https://github.com/PyGithub/PyGithub/issues/28#issuecomment-20227753","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28","id":20227753,"node_id":"MDEyOklzc3VlQ29tbWVudDIwMjI3NzUz","user":{"login":"stuglaser","id":1527117,"node_id":"MDQ6VXNlcjE1MjcxMTc=","avatar_url":"https://avatars.githubusercontent.com/u/1527117?v=4","gravatar_id":"","url":"https://api.github.com/users/stuglaser","html_url":"https://github.com/stuglaser","followers_url":"https://api.github.com/users/stuglaser/followers","following_url":"https://api.github.com/users/stuglaser/following{/other_user}","gists_url":"https://api.github.com/users/stuglaser/gists{/gist_id}","starred_url":"https://api.github.com/users/stuglaser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stuglaser/subscriptions","organizations_url":"https://api.github.com/users/stuglaser/orgs","repos_url":"https://api.github.com/users/stuglaser/repos","events_url":"https://api.github.com/users/stuglaser/events{/privacy}","received_events_url":"https://api.github.com/users/stuglaser/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2013-06-29T10:31:38Z","updated_at":"2013-06-29T10:31:38Z","author_association":"CONTRIBUTOR","body":"Comment created by PyGithub\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/20227753/reactions","total_count":2,"+1":1,"-1":0,"laugh":0,"hooray":1,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null} diff --git a/tests/ReplayData/IssueComment.testCreateReaction.txt b/tests/ReplayData/IssueComment.testCreateReaction.txt index 0d35109bb8..24d2df37a9 100644 --- a/tests/ReplayData/IssueComment.testCreateReaction.txt +++ b/tests/ReplayData/IssueComment.testCreateReaction.txt @@ -2,7 +2,7 @@ https POST api.github.com None -/repos/jacquev6/PyGithub/issues/comments/5808311/reactions +/repos/PyGithub/PyGithub/issues/comments/20227753/reactions {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed', 'Accept': 'application/vnd.github.squirrel-girl-preview', 'User-Agent': 'PyGithub/Python'} {"content": "hooray"} 201 diff --git a/tests/ReplayData/IssueComment.testDelete.txt b/tests/ReplayData/IssueComment.testDelete.txt index 31918f8e85..450cba662f 100644 --- a/tests/ReplayData/IssueComment.testDelete.txt +++ b/tests/ReplayData/IssueComment.testDelete.txt @@ -2,7 +2,7 @@ https DELETE api.github.com None -/repos/jacquev6/PyGithub/issues/comments/5808311 +/repos/PyGithub/PyGithub/issues/comments/20227753 {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 204 diff --git a/tests/ReplayData/IssueComment.testDeleteReaction.txt b/tests/ReplayData/IssueComment.testDeleteReaction.txt index 3e83b48bb7..89691cda54 100644 --- a/tests/ReplayData/IssueComment.testDeleteReaction.txt +++ b/tests/ReplayData/IssueComment.testDeleteReaction.txt @@ -2,7 +2,7 @@ https DELETE api.github.com None -/repos/jacquev6/PyGithub/issues/comments/5808311/reactions/85743754 +/repos/PyGithub/PyGithub/issues/comments/20227753/reactions/85743754 {'Accept': 'application/vnd.github.squirrel-girl-preview', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 204 diff --git a/tests/ReplayData/IssueComment.testEdit.txt b/tests/ReplayData/IssueComment.testEdit.txt index 6dd26d3962..a94a575b21 100644 --- a/tests/ReplayData/IssueComment.testEdit.txt +++ b/tests/ReplayData/IssueComment.testEdit.txt @@ -2,9 +2,9 @@ https PATCH api.github.com None -/repos/jacquev6/PyGithub/issues/comments/5808311 +/repos/PyGithub/PyGithub/issues/comments/20227753 {'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} {"body": "Comment edited by PyGithub"} 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4980'), ('content-length', '505'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"1599061186ef7ca2dbf5bdee1711746a"'), ('date', 'Sun, 20 May 2012 11:53:59 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"updated_at":"2012-05-20T11:53:59Z","body":"Comment edited by PyGithub","url":"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/5808311","created_at":"2012-05-20T11:46:42Z","user":{"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","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"id":5808311} +{"updated_at":"2012-05-20T11:53:59Z","body":"Comment edited by PyGithub","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/20227753","created_at":"2012-05-20T11:46:42Z","user":{"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","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"id":20227753} diff --git a/tests/ReplayData/IssueComment.testGetReactions.txt b/tests/ReplayData/IssueComment.testGetReactions.txt index 849603fb6f..d4d4ed7c7f 100644 --- a/tests/ReplayData/IssueComment.testGetReactions.txt +++ b/tests/ReplayData/IssueComment.testGetReactions.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/jacquev6/PyGithub/issues/comments/5808311/reactions +/repos/PyGithub/PyGithub/issues/comments/20227753/reactions {'Authorization': 'Basic login_and_password_removed', 'Accept': 'application/vnd.github.squirrel-girl-preview', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/IssueComment.testMinimize.txt b/tests/ReplayData/IssueComment.testMinimize.txt index b14ca95a34..9469c003b9 100644 --- a/tests/ReplayData/IssueComment.testMinimize.txt +++ b/tests/ReplayData/IssueComment.testMinimize.txt @@ -4,7 +4,7 @@ api.github.com None /graphql {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} -{"query": "mutation Mutation($input: MinimizeCommentInput!) { minimizeComment(input: $input) { minimizedComment { isMinimized } } }", "variables": {"input": {"subjectId": "IC_kwDOGpsAJ86Gecc_", "classifier": "OUTDATED"}}} +{"query": "mutation Mutation($input: MinimizeCommentInput!) { minimizeComment(input: $input) { minimizedComment { isMinimized } } }", "variables": {"input": {"subjectId": "MDEyOklzc3VlQ29tbWVudDIwMjI3NzUz", "classifier": "OUTDATED"}}} 200 [('Server', 'GitHub.com'), ('Date', 'Mon, 29 Jul 2024 14:43:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('github-authentication-token-expiration', '2024-08-28 16:30:05 +0200'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1722267171'), ('X-RateLimit-Used', '9'), ('X-RateLimit-Resource', 'graphql'), ('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', 'C08C:1A4F2F:3A882EB:3B486EE:66A7AAA0')] {"data":{"minimizeComment":{"minimizedComment":{"isMinimized":true}}}} diff --git a/tests/ReplayData/IssueComment.testUnminimize.txt b/tests/ReplayData/IssueComment.testUnminimize.txt index c6eb9aeb59..5a62c2a5e4 100644 --- a/tests/ReplayData/IssueComment.testUnminimize.txt +++ b/tests/ReplayData/IssueComment.testUnminimize.txt @@ -4,7 +4,7 @@ api.github.com None /graphql {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} -{"query": "mutation Mutation($input: UnminimizeCommentInput!) { unminimizeComment(input: $input) { unminimizedComment { isMinimized } } }", "variables": {"input": {"subjectId": "IC_kwDOGpsAJ86Gecc_"}}} +{"query": "mutation Mutation($input: UnminimizeCommentInput!) { unminimizeComment(input: $input) { unminimizedComment { isMinimized } } }", "variables": {"input": {"subjectId": "MDEyOklzc3VlQ29tbWVudDIwMjI3NzUz"}}} 200 [('Server', 'GitHub.com'), ('Date', 'Mon, 29 Jul 2024 14:43:55 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('github-authentication-token-expiration', '2024-08-28 16:30:05 +0200'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4990'), ('X-RateLimit-Reset', '1722267171'), ('X-RateLimit-Used', '10'), ('X-RateLimit-Resource', 'graphql'), ('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', 'C064:1A4F2F:3A8AFE1:3B4B457:66A7AAAB')] {"data":{"unminimizeComment":{"unminimizedComment":{"isMinimized":false}}}} From b481fab0853d6f7c33cefe7686e5f74c94c0301c Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 12:19:28 +0100 Subject: [PATCH 14/15] Sync NamedUser class with API spec (#3149) Adds the following attributes: - display_login - notification_email - role_name - score - starred_at - text_matches - user_view_type --- github/NamedUser.py | 52 +++++++++++++- tests/NamedUser.py | 102 +++++++++++++++------------ tests/ReplayData/NamedUser.setUp.txt | 4 +- tests/Search.py | 1 + 4 files changed, 110 insertions(+), 49 deletions(-) diff --git a/github/NamedUser.py b/github/NamedUser.py index d98eccba3d..6b25ae4d7c 100644 --- a/github/NamedUser.py +++ b/github/NamedUser.py @@ -93,10 +93,7 @@ class NamedUser(github.GithubObject.CompletableGithubObject): - /components/schemas/actor - /components/schemas/collaborator - /components/schemas/contributor - - /components/schemas/empty-object - - /components/schemas/nullable-git-user - /components/schemas/nullable-simple-user - - /components/schemas/organization-invitation - /components/schemas/public-user - /components/schemas/simple-user - /components/schemas/user-search-result-item @@ -112,6 +109,7 @@ def _initAttributes(self) -> None: self._contributions: Attribute[int] = NotSet self._created_at: Attribute[datetime] = NotSet self._disk_usage: Attribute[int] = NotSet + self._display_login: Attribute[str] = NotSet self._email: Attribute[str | None] = NotSet self._events_url: Attribute[str] = NotSet self._followers: Attribute[int] = NotSet @@ -129,6 +127,7 @@ def _initAttributes(self) -> None: self._login: Attribute[str] = NotSet self._name: Attribute[str] = NotSet self._node_id: Attribute[str] = NotSet + self._notification_email: Attribute[str] = NotSet self._organizations_url: Attribute[str] = NotSet self._owned_private_repos: Attribute[int] = NotSet self._permissions: Attribute[Permissions] = NotSet @@ -139,16 +138,21 @@ def _initAttributes(self) -> None: self._received_events_url: Attribute[str] = NotSet self._repos_url: Attribute[str] = NotSet self._role: Attribute[str] = NotSet + self._role_name: Attribute[str] = NotSet + self._score: Attribute[float] = NotSet self._site_admin: Attribute[bool] = NotSet + self._starred_at: Attribute[str] = NotSet self._starred_url: Attribute[str] = NotSet self._subscriptions_url: Attribute[str] = NotSet self._suspended_at: Attribute[datetime | None] = NotSet self._team_count: Attribute[int] = NotSet + self._text_matches: Attribute[dict[str, Any]] = NotSet self._total_private_repos: Attribute[int] = NotSet self._twitter_username: Attribute[str | None] = NotSet self._type: Attribute[str] = NotSet self._updated_at: Attribute[datetime] = NotSet self._url: Attribute[str] = NotSet + self._user_view_type: Attribute[str] = NotSet def __eq__(self, other: Any) -> bool: return isinstance(other, type(self)) and self.login == other.login and self.id == other.id @@ -203,6 +207,10 @@ def disk_usage(self) -> int: self._completeIfNotSet(self._disk_usage) return self._disk_usage.value + @property + def display_login(self) -> str: + return self._display_login.value + @property def email(self) -> str | None: self._completeIfNotSet(self._email) @@ -288,6 +296,10 @@ def node_id(self) -> str: self._completeIfNotSet(self._node_id) return self._node_id.value + @property + def notification_email(self) -> str: + return self._notification_email.value + @property def organizations_url(self) -> str: self._completeIfNotSet(self._organizations_url) @@ -338,11 +350,23 @@ def role(self) -> str: self._completeIfNotSet(self._role) return self._role.value + @property + def role_name(self) -> str: + return self._role_name.value + + @property + def score(self) -> float: + return self._score.value + @property def site_admin(self) -> bool: self._completeIfNotSet(self._site_admin) return self._site_admin.value + @property + def starred_at(self) -> str: + return self._starred_at.value + @property def starred_url(self) -> str: self._completeIfNotSet(self._starred_url) @@ -363,6 +387,10 @@ def team_count(self) -> int: self._completeIfNotSet(self._team_count) return self._team_count.value + @property + def text_matches(self) -> dict[str, Any]: + return self._text_matches.value + @property def total_private_repos(self) -> int | None: self._completeIfNotSet(self._total_private_repos) @@ -388,6 +416,10 @@ def url(self) -> str: self._completeIfNotSet(self._url) return self._url.value + @property + def user_view_type(self) -> str: + return self._user_view_type.value + def get_events(self) -> PaginatedList[Event]: """ :calls: `GET /users/{user}/events `_ @@ -570,6 +602,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "disk_usage" in attributes: # pragma no branch self._disk_usage = self._makeIntAttribute(attributes["disk_usage"]) + if "display_login" in attributes: # pragma no branch + self._display_login = self._makeStringAttribute(attributes["display_login"]) if "email" in attributes: # pragma no branch self._email = self._makeStringAttribute(attributes["email"]) if "events_url" in attributes: # pragma no branch @@ -604,6 +638,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._name = self._makeStringAttribute(attributes["name"]) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) + if "notification_email" in attributes: # pragma no branch + self._notification_email = self._makeStringAttribute(attributes["notification_email"]) if "organizations_url" in attributes: # pragma no branch self._organizations_url = self._makeStringAttribute(attributes["organizations_url"]) if "owned_private_repos" in attributes: # pragma no branch @@ -624,8 +660,14 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._repos_url = self._makeStringAttribute(attributes["repos_url"]) if "role" in attributes: # pragma no branch self._role = self._makeStringAttribute(attributes["role"]) + if "role_name" in attributes: # pragma no branch + self._role_name = self._makeStringAttribute(attributes["role_name"]) + if "score" in attributes: # pragma no branch + self._score = self._makeFloatAttribute(attributes["score"]) if "site_admin" in attributes: # pragma no branch self._site_admin = self._makeBoolAttribute(attributes["site_admin"]) + if "starred_at" in attributes: # pragma no branch + self._starred_at = self._makeStringAttribute(attributes["starred_at"]) if "starred_url" in attributes: # pragma no branch self._starred_url = self._makeStringAttribute(attributes["starred_url"]) if "subscriptions_url" in attributes: # pragma no branch @@ -634,6 +676,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._suspended_at = self._makeDatetimeAttribute(attributes["suspended_at"]) if "team_count" in attributes: self._team_count = self._makeIntAttribute(attributes["team_count"]) + if "text_matches" in attributes: # pragma no branch + self._text_matches = self._makeDictAttribute(attributes["text_matches"]) if "total_private_repos" in attributes: # pragma no branch self._total_private_repos = self._makeIntAttribute(attributes["total_private_repos"]) if "twitter_username" in attributes: # pragma no branch @@ -644,3 +688,5 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "url" in attributes: # pragma no branch self._url = self._makeStringAttribute(attributes["url"]) + if "user_view_type" in attributes: # pragma no branch + self._user_view_type = self._makeStringAttribute(attributes["user_view_type"]) diff --git a/tests/NamedUser.py b/tests/NamedUser.py index 641d3685bc..f12bf1559f 100644 --- a/tests/NamedUser.py +++ b/tests/NamedUser.py @@ -38,6 +38,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timezone from . import Framework @@ -48,6 +50,62 @@ def setUp(self): super().setUp() self.user = self.g.get_user("jacquev6") + def testAttributes(self): + self.assertEqual(self.user.avatar_url, "https://avatars.githubusercontent.com/u/327146?v=4") + self.assertIsNone(self.user.bio) + self.assertEqual(self.user.blog, "http://vincent-jacques.net") + self.assertIsNone(self.user.collaborators) + self.assertIsNone(self.user.company) + self.assertIsNone(self.user.contributions) + self.assertEqual(self.user.created_at, datetime(2010, 7, 9, 6, 10, 6, tzinfo=timezone.utc)) + self.assertIsNone(self.user.disk_usage) + self.assertIsNone(self.user.display_login) + self.assertEqual(self.user.email, "vincent@vincent-jacques.net") + self.assertEqual(self.user.events_url, "https://api.github.com/users/jacquev6/events{/privacy}") + self.assertEqual(self.user.followers, 98) + self.assertEqual(self.user.followers_url, "https://api.github.com/users/jacquev6/followers") + self.assertEqual(self.user.following, 62) + self.assertEqual(self.user.following_url, "https://api.github.com/users/jacquev6/following{/other_user}") + self.assertEqual(self.user.gists_url, "https://api.github.com/users/jacquev6/gists{/gist_id}") + self.assertEqual(self.user.gravatar_id, "") + self.assertTrue(self.user.hireable) + self.assertEqual(self.user.html_url, "https://github.com/jacquev6") + self.assertEqual(self.user.id, 327146) + self.assertEqual(self.user.location, "France") + self.assertEqual(self.user.login, "jacquev6") + self.assertEqual(self.user.name, "Vincent Jacques") + self.assertEqual(self.user.node_id, "MDQ6VXNlcjMyNzE0Ng==") + self.assertIsNone(self.user.notification_email) + self.assertEqual(self.user.organizations_url, "https://api.github.com/users/jacquev6/orgs") + self.assertIsNone(self.user.owned_private_repos) + self.assertIsNone(self.user.permissions) + self.assertIsNone(self.user.plan) + self.assertIsNone(self.user.plan) + self.assertIsNone(self.user.plan) + self.assertIsNone(self.user.plan) + self.assertIsNone(self.user.private_gists) + self.assertEqual(self.user.public_gists, 18) + self.assertEqual(self.user.public_repos, 38) + self.assertEqual(self.user.received_events_url, "https://api.github.com/users/jacquev6/received_events") + self.assertEqual(self.user.repos_url, "https://api.github.com/users/jacquev6/repos") + self.assertIsNone(self.user.role_name) + self.assertEqual(self.user.score, None) + self.assertEqual(self.user.site_admin, False) + self.assertIsNone(self.user.starred_at) + self.assertEqual(self.user.starred_url, "https://api.github.com/users/jacquev6/starred{/owner}{/repo}") + self.assertEqual(self.user.subscriptions_url, "https://api.github.com/users/jacquev6/subscriptions") + self.assertIsNone(self.user.suspended_at) + self.assertIsNone(self.user.text_matches) + self.assertIsNone(self.user.total_private_repos) + self.assertIsNone(self.user.twitter_username) + self.assertEqual(self.user.type, "User") + self.assertEqual(self.user.updated_at, datetime(2024, 10, 20, 7, 14, 52, tzinfo=timezone.utc)) + self.assertEqual(self.user.url, "https://api.github.com/users/jacquev6") + self.assertEqual(self.user.node_id, "MDQ6VXNlcjMyNzE0Ng==") + self.assertEqual(repr(self.user), 'NamedUser(login="jacquev6")') + self.assertEqual(repr(self.user.plan), "None") + self.assertEqual(self.user.user_view_type, "public") + def testAttributesOfOtherUser(self): self.user = self.g.get_user("nvie") self.assertEqual( @@ -86,50 +144,6 @@ def testAttributesOfOtherUser(self): self.assertEqual(self.user.node_id, "MDQ6VXNlcjgzODQ0") self.assertEqual(repr(self.user), 'NamedUser(login="nvie")') - def testAttributesOfSelf(self): - self.assertEqual( - self.user.avatar_url, - "https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png", - ) - self.assertEqual(self.user.bio, "") - self.assertEqual(self.user.blog, "http://vincent-jacques.net") - self.assertEqual(self.user.collaborators, 0) - self.assertEqual(self.user.company, "Criteo") - self.assertEqual( - self.user.created_at, - datetime(2010, 7, 9, 6, 10, 6, tzinfo=timezone.utc), - ) - self.assertEqual(self.user.disk_usage, 17080) - self.assertEqual(self.user.email, "vincent@vincent-jacques.net") - self.assertEqual(self.user.followers, 13) - self.assertEqual(self.user.following, 24) - self.assertEqual(self.user.gravatar_id, "b68de5ae38616c296fa345d2b9df2225") - self.assertFalse(self.user.hireable) - self.assertEqual(self.user.html_url, "https://github.com/jacquev6") - self.assertEqual(self.user.id, 327146) - self.assertEqual(self.user.location, "Paris, France") - self.assertEqual(self.user.login, "jacquev6") - self.assertEqual(self.user.name, "Vincent Jacques") - self.assertEqual(self.user.owned_private_repos, 5) - self.assertEqual(self.user.plan.name, "micro") - self.assertEqual(self.user.plan.collaborators, 1) - self.assertEqual(self.user.plan.space, 614400) - self.assertEqual(self.user.plan.private_repos, 5) - self.assertEqual(self.user.private_gists, 5) - self.assertEqual(self.user.public_gists, 2) - self.assertEqual(self.user.public_repos, 11) - self.assertEqual( - self.user.suspended_at, - datetime(2013, 8, 10, 7, 11, 7, tzinfo=timezone.utc), - ) - self.assertEqual(self.user.total_private_repos, 5) - self.assertIsNone(self.user.twitter_username) - self.assertEqual(self.user.type, "User") - self.assertEqual(self.user.url, "https://api.github.com/users/jacquev6") - self.assertEqual(self.user.node_id, "MDQ6VXNlcjMyNzE0Ng==") - self.assertEqual(repr(self.user), 'NamedUser(login="jacquev6")') - self.assertEqual(repr(self.user.plan), 'Plan(name="micro")') - def testGetGists(self): self.assertListKeyEqual( self.user.get_gists(), diff --git a/tests/ReplayData/NamedUser.setUp.txt b/tests/ReplayData/NamedUser.setUp.txt index 093b8dd8dc..23d642baf2 100644 --- a/tests/ReplayData/NamedUser.setUp.txt +++ b/tests/ReplayData/NamedUser.setUp.txt @@ -6,5 +6,5 @@ None {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4960'), ('content-length', '801'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"2b9d2167029cc33666d02e0b0e95f2b9"'), ('date', 'Sat, 26 May 2012 11:08:21 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"type":"User","disk_usage":17080,"public_gists":2,"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","public_repos":11,"hireable":false,"private_gists":5,"plan":{"private_repos":5,"collaborators":1,"name":"micro","space":614400},"bio":"","company":"Criteo","blog":"http://vincent-jacques.net","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","total_private_repos":5,"email":"vincent@vincent-jacques.net","collaborators":0,"followers":13,"name":"Vincent Jacques","owned_private_repos":5,"created_at":"2010-07-09T06:10:06Z","suspended_at":"2013-08-10T07:11:07Z","location":"Paris, France","id":327146,"following":24,"html_url":"https://github.com/jacquev6", "node_id":"MDQ6VXNlcjMyNzE0Ng=="} +[('Date', 'Fri, 03 Jan 2025 22:05:16 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"cdcdd165941281cdc3948a0cdff00dcb40d91a0ba044e67272d5b433326e8f81"'), ('Last-Modified', 'Sun, 20 Oct 2024 07:14:52 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1735944560'), ('X-RateLimit-Used', '4'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'DEEE:4E297:23C6134F:24ABF6D7:67785F1C')] +{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?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","user_view_type":"public","site_admin":false,"name":"Vincent Jacques","company":null,"blog":"http://vincent-jacques.net","location":"France","email":"vincent@vincent-jacques.net","hireable":true,"bio":null,"twitter_username":null,"public_repos":38,"public_gists":18,"followers":98,"following":62,"created_at":"2010-07-09T06:10:06Z","updated_at":"2024-10-20T07:14:52Z"} diff --git a/tests/Search.py b/tests/Search.py index ed7deefa9d..50018f5d65 100644 --- a/tests/Search.py +++ b/tests/Search.py @@ -90,6 +90,7 @@ def testPaginateSearchUsers(self): ], ) self.assertEqual(users.totalCount, 6038) + self.assertEqual(users[0].score, 1.0) def testGetPageOnSearchUsers(self): users = self.g.search_users("", location="Berlin") From 5b36bc40d333be3e003fd8b19fc5cf467abdbbfb Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Thu, 9 Jan 2025 12:19:32 +0100 Subject: [PATCH 15/15] Sync Organization class with API spec (#3150) Adds the following attributes: - advanced_security_enabled_for_new_repositories - dependabot_alerts_enabled_for_new_repositories - dependabot_security_updates_enabled_for_new_repositories - dependency_graph_enabled_for_new_repositories - display_login - is_verified - members_allowed_repository_creation_type - members_can_create_internal_repositories - members_can_create_pages - members_can_create_private_pages - members_can_create_private_repositories - members_can_create_public_pages - members_can_create_public_repositories - members_can_fork_private_repositories - node_id - secret_scanning_enabled_for_new_repositories - secret_scanning_push_protection_custom_link - secret_scanning_push_protection_custom_link_enabled - secret_scanning_push_protection_enabled_for_new_repositories - twitter_username - web_commit_signoff_required --- github/Organization.py | 199 +++++++++++++++++++++++- tests/Organization.py | 76 ++++++--- tests/ReplayData/Organization.setUp.txt | 4 +- 3 files changed, 252 insertions(+), 27 deletions(-) diff --git a/github/Organization.py b/github/Organization.py index caf45d8748..53c898b340 100644 --- a/github/Organization.py +++ b/github/Organization.py @@ -145,7 +145,6 @@ class Organization(CompletableGithubObject): The OpenAPI schema can be found at - /components/schemas/actor - - /components/schemas/nullable-simple-user - /components/schemas/organization-full - /components/schemas/organization-simple - /components/schemas/team-organization @@ -153,6 +152,7 @@ class Organization(CompletableGithubObject): """ def _initAttributes(self) -> None: + self._advanced_security_enabled_for_new_repositories: Attribute[bool] = NotSet self._archived_at: Attribute[datetime] = NotSet self._avatar_url: Attribute[str] = NotSet self._billing_email: Attribute[str] = NotSet @@ -161,8 +161,12 @@ def _initAttributes(self) -> None: self._company: Attribute[str] = NotSet self._created_at: Attribute[datetime] = NotSet self._default_repository_permission: Attribute[str] = NotSet + self._dependabot_alerts_enabled_for_new_repositories: Attribute[bool] = NotSet + self._dependabot_security_updates_enabled_for_new_repositories: Attribute[bool] = NotSet + self._dependency_graph_enabled_for_new_repositories: Attribute[bool] = NotSet self._description: Attribute[str] = NotSet self._disk_usage: Attribute[int] = NotSet + self._display_login: Attribute[str] = NotSet self._email: Attribute[str] = NotSet self._events_url: Attribute[str] = NotSet self._followers: Attribute[int] = NotSet @@ -173,12 +177,22 @@ def _initAttributes(self) -> None: self._hooks_url: Attribute[str] = NotSet self._html_url: Attribute[str] = NotSet self._id: Attribute[int] = NotSet + self._is_verified: Attribute[bool] = NotSet self._issues_url: Attribute[str] = NotSet self._location: Attribute[str] = NotSet self._login: Attribute[str] = NotSet + self._members_allowed_repository_creation_type: Attribute[str] = NotSet + self._members_can_create_internal_repositories: Attribute[bool] = NotSet + self._members_can_create_pages: Attribute[bool] = NotSet + self._members_can_create_private_pages: Attribute[bool] = NotSet + self._members_can_create_private_repositories: Attribute[bool] = NotSet + self._members_can_create_public_pages: Attribute[bool] = NotSet + self._members_can_create_public_repositories: Attribute[bool] = NotSet self._members_can_create_repositories: Attribute[bool] = NotSet + self._members_can_fork_private_repositories: Attribute[bool] = NotSet self._members_url: Attribute[str] = NotSet self._name: Attribute[str] = NotSet + self._node_id: Attribute[str] = NotSet self._owned_private_repos: Attribute[int] = NotSet self._plan: Attribute[Plan] = NotSet self._private_gists: Attribute[int] = NotSet @@ -186,15 +200,26 @@ def _initAttributes(self) -> None: self._public_members_url: Attribute[str] = NotSet self._public_repos: Attribute[int] = NotSet self._repos_url: Attribute[str] = NotSet + self._secret_scanning_enabled_for_new_repositories: Attribute[bool] = NotSet + self._secret_scanning_push_protection_custom_link: Attribute[str] = NotSet + self._secret_scanning_push_protection_custom_link_enabled: Attribute[bool] = NotSet + self._secret_scanning_push_protection_enabled_for_new_repositories: Attribute[bool] = NotSet self._total_private_repos: Attribute[int] = NotSet + self._twitter_username: Attribute[str] = NotSet self._two_factor_requirement_enabled: Attribute[bool] = NotSet self._type: Attribute[str] = NotSet self._updated_at: Attribute[datetime] = NotSet self._url: Attribute[str] = NotSet + self._web_commit_signoff_required: Attribute[bool] = NotSet def __repr__(self) -> str: return self.get__repr__({"login": self._login.value}) + @property + def advanced_security_enabled_for_new_repositories(self) -> bool: + self._completeIfNotSet(self._advanced_security_enabled_for_new_repositories) + return self._advanced_security_enabled_for_new_repositories.value + @property def archived_at(self) -> datetime: self._completeIfNotSet(self._archived_at) @@ -235,6 +260,21 @@ def default_repository_permission(self) -> str: self._completeIfNotSet(self._default_repository_permission) return self._default_repository_permission.value + @property + def dependabot_alerts_enabled_for_new_repositories(self) -> bool: + self._completeIfNotSet(self._dependabot_alerts_enabled_for_new_repositories) + return self._dependabot_alerts_enabled_for_new_repositories.value + + @property + def dependabot_security_updates_enabled_for_new_repositories(self) -> bool: + self._completeIfNotSet(self._dependabot_security_updates_enabled_for_new_repositories) + return self._dependabot_security_updates_enabled_for_new_repositories.value + + @property + def dependency_graph_enabled_for_new_repositories(self) -> bool: + self._completeIfNotSet(self._dependency_graph_enabled_for_new_repositories) + return self._dependency_graph_enabled_for_new_repositories.value + @property def description(self) -> str: self._completeIfNotSet(self._description) @@ -245,6 +285,11 @@ def disk_usage(self) -> int: self._completeIfNotSet(self._disk_usage) return self._disk_usage.value + @property + def display_login(self) -> str: + self._completeIfNotSet(self._display_login) + return self._display_login.value + @property def email(self) -> str | None: self._completeIfNotSet(self._email) @@ -295,6 +340,11 @@ def id(self) -> int: self._completeIfNotSet(self._id) return self._id.value + @property + def is_verified(self) -> bool: + self._completeIfNotSet(self._is_verified) + return self._is_verified.value + @property def issues_url(self) -> str: self._completeIfNotSet(self._issues_url) @@ -310,11 +360,51 @@ def login(self) -> str: self._completeIfNotSet(self._login) return self._login.value + @property + def members_allowed_repository_creation_type(self) -> str: + self._completeIfNotSet(self._members_allowed_repository_creation_type) + return self._members_allowed_repository_creation_type.value + + @property + def members_can_create_internal_repositories(self) -> bool: + self._completeIfNotSet(self._members_can_create_internal_repositories) + return self._members_can_create_internal_repositories.value + + @property + def members_can_create_pages(self) -> bool: + self._completeIfNotSet(self._members_can_create_pages) + return self._members_can_create_pages.value + + @property + def members_can_create_private_pages(self) -> bool: + self._completeIfNotSet(self._members_can_create_private_pages) + return self._members_can_create_private_pages.value + + @property + def members_can_create_private_repositories(self) -> bool: + self._completeIfNotSet(self._members_can_create_private_repositories) + return self._members_can_create_private_repositories.value + + @property + def members_can_create_public_pages(self) -> bool: + self._completeIfNotSet(self._members_can_create_public_pages) + return self._members_can_create_public_pages.value + + @property + def members_can_create_public_repositories(self) -> bool: + self._completeIfNotSet(self._members_can_create_public_repositories) + return self._members_can_create_public_repositories.value + @property def members_can_create_repositories(self) -> bool: self._completeIfNotSet(self._members_can_create_repositories) return self._members_can_create_repositories.value + @property + def members_can_fork_private_repositories(self) -> bool: + self._completeIfNotSet(self._members_can_fork_private_repositories) + return self._members_can_fork_private_repositories.value + @property def members_url(self) -> str: self._completeIfNotSet(self._members_url) @@ -325,6 +415,11 @@ def name(self) -> str | None: self._completeIfNotSet(self._name) return self._name.value + @property + def node_id(self) -> str: + self._completeIfNotSet(self._node_id) + return self._node_id.value + @property def owned_private_repos(self) -> int: self._completeIfNotSet(self._owned_private_repos) @@ -360,11 +455,36 @@ def repos_url(self) -> str: self._completeIfNotSet(self._repos_url) return self._repos_url.value + @property + def secret_scanning_enabled_for_new_repositories(self) -> bool: + self._completeIfNotSet(self._secret_scanning_enabled_for_new_repositories) + return self._secret_scanning_enabled_for_new_repositories.value + + @property + def secret_scanning_push_protection_custom_link(self) -> str: + self._completeIfNotSet(self._secret_scanning_push_protection_custom_link) + return self._secret_scanning_push_protection_custom_link.value + + @property + def secret_scanning_push_protection_custom_link_enabled(self) -> bool: + self._completeIfNotSet(self._secret_scanning_push_protection_custom_link_enabled) + return self._secret_scanning_push_protection_custom_link_enabled.value + + @property + def secret_scanning_push_protection_enabled_for_new_repositories(self) -> bool: + self._completeIfNotSet(self._secret_scanning_push_protection_enabled_for_new_repositories) + return self._secret_scanning_push_protection_enabled_for_new_repositories.value + @property def total_private_repos(self) -> int: self._completeIfNotSet(self._total_private_repos) return self._total_private_repos.value + @property + def twitter_username(self) -> str: + self._completeIfNotSet(self._twitter_username) + return self._twitter_username.value + @property def two_factor_requirement_enabled(self) -> bool: self._completeIfNotSet(self._two_factor_requirement_enabled) @@ -385,6 +505,11 @@ def url(self) -> str: self._completeIfNotSet(self._url) return self._url.value + @property + def web_commit_signoff_required(self) -> bool: + self._completeIfNotSet(self._web_commit_signoff_required) + return self._web_commit_signoff_required.value + def add_to_members(self, member: NamedUser, role: Opt[str] = NotSet) -> None: """ :calls: `PUT /orgs/{org}/memberships/{user} `_ @@ -1466,6 +1591,10 @@ def create_custom_property_values( self._requester.requestJsonAndCheck("PATCH", f"{self.url}/properties/values", input=patch_parameters) def _useAttributes(self, attributes: dict[str, Any]) -> None: + if "advanced_security_enabled_for_new_repositories" in attributes: # pragma no branch + self._advanced_security_enabled_for_new_repositories = self._makeBoolAttribute( + attributes["advanced_security_enabled_for_new_repositories"] + ) if "archived_at" in attributes: # pragma no branch assert attributes["archived_at"] is None or isinstance(attributes["archived_at"], str), attributes[ "archived_at" @@ -1485,10 +1614,24 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "default_repository_permission" in attributes: # pragma no branch self._default_repository_permission = self._makeStringAttribute(attributes["default_repository_permission"]) + if "dependabot_alerts_enabled_for_new_repositories" in attributes: # pragma no branch + self._dependabot_alerts_enabled_for_new_repositories = self._makeBoolAttribute( + attributes["dependabot_alerts_enabled_for_new_repositories"] + ) + if "dependabot_security_updates_enabled_for_new_repositories" in attributes: # pragma no branch + self._dependabot_security_updates_enabled_for_new_repositories = self._makeBoolAttribute( + attributes["dependabot_security_updates_enabled_for_new_repositories"] + ) + if "dependency_graph_enabled_for_new_repositories" in attributes: # pragma no branch + self._dependency_graph_enabled_for_new_repositories = self._makeBoolAttribute( + attributes["dependency_graph_enabled_for_new_repositories"] + ) if "description" in attributes: # pragma no branch self._description = self._makeStringAttribute(attributes["description"]) if "disk_usage" in attributes: # pragma no branch self._disk_usage = self._makeIntAttribute(attributes["disk_usage"]) + if "display_login" in attributes: # pragma no branch + self._display_login = self._makeStringAttribute(attributes["display_login"]) if "email" in attributes: # pragma no branch self._email = self._makeStringAttribute(attributes["email"]) if "events_url" in attributes: # pragma no branch @@ -1509,20 +1652,54 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + if "is_verified" in attributes: # pragma no branch + self._is_verified = self._makeBoolAttribute(attributes["is_verified"]) if "issues_url" in attributes: # pragma no branch self._issues_url = self._makeStringAttribute(attributes["issues_url"]) if "location" in attributes: # pragma no branch self._location = self._makeStringAttribute(attributes["location"]) if "login" in attributes: # pragma no branch self._login = self._makeStringAttribute(attributes["login"]) + if "members_allowed_repository_creation_type" in attributes: # pragma no branch + self._members_allowed_repository_creation_type = self._makeStringAttribute( + attributes["members_allowed_repository_creation_type"] + ) + if "members_can_create_internal_repositories" in attributes: # pragma no branch + self._members_can_create_internal_repositories = self._makeBoolAttribute( + attributes["members_can_create_internal_repositories"] + ) + if "members_can_create_pages" in attributes: # pragma no branch + self._members_can_create_pages = self._makeBoolAttribute(attributes["members_can_create_pages"]) + if "members_can_create_private_pages" in attributes: # pragma no branch + self._members_can_create_private_pages = self._makeBoolAttribute( + attributes["members_can_create_private_pages"] + ) + if "members_can_create_private_repositories" in attributes: # pragma no branch + self._members_can_create_private_repositories = self._makeBoolAttribute( + attributes["members_can_create_private_repositories"] + ) + if "members_can_create_public_pages" in attributes: # pragma no branch + self._members_can_create_public_pages = self._makeBoolAttribute( + attributes["members_can_create_public_pages"] + ) + if "members_can_create_public_repositories" in attributes: # pragma no branch + self._members_can_create_public_repositories = self._makeBoolAttribute( + attributes["members_can_create_public_repositories"] + ) if "members_can_create_repositories" in attributes: # pragma no branch self._members_can_create_repositories = self._makeBoolAttribute( attributes["members_can_create_repositories"] ) + if "members_can_fork_private_repositories" in attributes: # pragma no branch + self._members_can_fork_private_repositories = self._makeBoolAttribute( + attributes["members_can_fork_private_repositories"] + ) if "members_url" in attributes: # pragma no branch self._members_url = self._makeStringAttribute(attributes["members_url"]) 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 "owned_private_repos" in attributes: # pragma no branch self._owned_private_repos = self._makeIntAttribute(attributes["owned_private_repos"]) if "plan" in attributes: # pragma no branch @@ -1537,8 +1714,26 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._public_repos = self._makeIntAttribute(attributes["public_repos"]) if "repos_url" in attributes: # pragma no branch self._repos_url = self._makeStringAttribute(attributes["repos_url"]) + if "secret_scanning_enabled_for_new_repositories" in attributes: # pragma no branch + self._secret_scanning_enabled_for_new_repositories = self._makeBoolAttribute( + attributes["secret_scanning_enabled_for_new_repositories"] + ) + if "secret_scanning_push_protection_custom_link" in attributes: # pragma no branch + self._secret_scanning_push_protection_custom_link = self._makeStringAttribute( + attributes["secret_scanning_push_protection_custom_link"] + ) + if "secret_scanning_push_protection_custom_link_enabled" in attributes: # pragma no branch + self._secret_scanning_push_protection_custom_link_enabled = self._makeBoolAttribute( + attributes["secret_scanning_push_protection_custom_link_enabled"] + ) + if "secret_scanning_push_protection_enabled_for_new_repositories" in attributes: # pragma no branch + self._secret_scanning_push_protection_enabled_for_new_repositories = self._makeBoolAttribute( + attributes["secret_scanning_push_protection_enabled_for_new_repositories"] + ) if "total_private_repos" in attributes: # pragma no branch self._total_private_repos = self._makeIntAttribute(attributes["total_private_repos"]) + if "twitter_username" in attributes: # pragma no branch + self._twitter_username = self._makeStringAttribute(attributes["twitter_username"]) if "two_factor_requirement_enabled" in attributes: # pragma no branch self._two_factor_requirement_enabled = self._makeBoolAttribute(attributes["two_factor_requirement_enabled"]) if "type" in attributes: # pragma no branch @@ -1547,3 +1742,5 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "url" in attributes: # pragma no branch self._url = self._makeStringAttribute(attributes["url"]) + if "web_commit_signoff_required" in attributes: # pragma no branch + self._web_commit_signoff_required = self._makeBoolAttribute(attributes["web_commit_signoff_required"]) diff --git a/tests/Organization.py b/tests/Organization.py index c7e891a77f..675fff1be2 100644 --- a/tests/Organization.py +++ b/tests/Organization.py @@ -62,6 +62,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timezone from unittest import mock @@ -77,46 +79,72 @@ def setUp(self): self.org = self.g.get_organization("BeaverSoftware") def testAttributes(self): - self.assertEqual(self.org.avatar_url, "https://avatars1.githubusercontent.com/u/1?v=4") + self.assertIsNone(self.org.advanced_security_enabled_for_new_repositories) + self.assertIsNone(self.org.archived_at) + self.assertEqual(self.org.avatar_url, "https://avatars.githubusercontent.com/u/12345678?v=4") self.assertEqual(self.org.billing_email, "foo@example.com") self.assertEqual(self.org.blog, "http://www.example.com") self.assertEqual(self.org.collaborators, 9) self.assertEqual(self.org.company, None) - self.assertEqual( - self.org.created_at, - datetime(2014, 1, 9, 16, 56, 17, tzinfo=timezone.utc), - ) - self.assertEqual(self.org.default_repository_permission, "none") + self.assertEqual(self.org.created_at, datetime(2014, 1, 9, 16, 56, 17, tzinfo=timezone.utc)) + self.assertIsNone(self.org.default_repository_permission) + self.assertIsNone(self.org.dependabot_alerts_enabled_for_new_repositories) + self.assertIsNone(self.org.dependabot_security_updates_enabled_for_new_repositories) + self.assertIsNone(self.org.dependency_graph_enabled_for_new_repositories) self.assertEqual(self.org.description, "BeaverSoftware writes software.") - self.assertEqual(self.org.disk_usage, 2) - self.assertEqual(self.org.email, "") - self.assertEqual(self.org.followers, 0) - self.assertEqual(self.org.following, 0) + self.assertIsNone(self.org.disk_usage) + self.assertIsNone(self.org.display_login) + self.assertEqual(self.org.email, "foo@example.com") + self.assertEqual(self.org.events_url, "https://api.github.com/orgs/BeaverSoftware/events") + self.assertEqual(self.org.followers, 130) + self.assertEqual(self.org.following, 1) self.assertEqual(self.org.gravatar_id, None) - self.assertTrue(self.org.has_organization_projects) - self.assertTrue(self.org.has_repository_projects) + self.assertEqual(self.org.has_organization_projects, True) + self.assertEqual(self.org.has_repository_projects, True) self.assertEqual(self.org.hooks_url, "https://api.github.com/orgs/BeaverSoftware/hooks") self.assertEqual(self.org.html_url, "https://github.com/BeaverSoftware") - self.assertEqual(self.org.id, 1) + self.assertEqual(self.org.id, 21341965) + self.assertEqual(self.org.is_verified, False) self.assertEqual(self.org.issues_url, "https://api.github.com/orgs/BeaverSoftware/issues") self.assertEqual(self.org.location, "Paris, France") self.assertEqual(self.org.login, "BeaverSoftware") - self.assertFalse(self.org.members_can_create_repositories) + self.assertEqual(self.org.members_allowed_repository_creation_type, "none") + self.assertEqual(self.org.members_can_create_internal_repositories, False) + self.assertEqual(self.org.members_can_create_pages, True) + self.assertEqual(self.org.members_can_create_private_pages, True) + self.assertEqual(self.org.members_can_create_private_repositories, False) + self.assertEqual(self.org.members_can_create_public_pages, True) + self.assertEqual(self.org.members_can_create_public_repositories, False) + self.assertEqual(self.org.members_can_create_repositories, False) + self.assertEqual(self.org.members_can_fork_private_repositories, False) + self.assertEqual(self.org.members_url, "https://api.github.com/orgs/BeaverSoftware/members{/member}") self.assertEqual(self.org.name, "BeaverSoftware") - self.assertEqual(self.org.owned_private_repos, 0) - self.assertEqual(self.org.plan.name, "free") - self.assertEqual(self.org.plan.private_repos, 3) - self.assertEqual(self.org.plan.space, 1) - self.assertEqual(self.org.plan.filled_seats, 3) - self.assertEqual(self.org.plan.seats, 0) - self.assertEqual(self.org.private_gists, 0) + self.assertEqual(self.org.node_id, "AbCdEfG") + self.assertEqual(self.org.owned_private_repos, 191) + self.assertEqual(self.org.plan.name, "enterprise") + self.assertEqual(self.org.plan.private_repos, 999999) + self.assertEqual(self.org.plan.space, 123456789) + self.assertEqual(self.org.plan.filled_seats, 640) + self.assertEqual(self.org.plan.seats, 1024) + self.assertIsNone(self.org.private_gists) self.assertEqual(self.org.public_gists, 0) - self.assertEqual(self.org.public_repos, 27) - self.assertEqual(self.org.total_private_repos, 7) - self.assertEqual(self.org.two_factor_requirement_enabled, None) + self.assertEqual( + self.org.public_members_url, "https://api.github.com/orgs/BeaverSoftware/public_members{/member}" + ) + self.assertEqual(self.org.public_repos, 121) + self.assertEqual(self.org.repos_url, "https://api.github.com/orgs/BeaverSoftware/repos") + self.assertIsNone(self.org.secret_scanning_enabled_for_new_repositories) + self.assertIsNone(self.org.secret_scanning_push_protection_custom_link) + self.assertIsNone(self.org.secret_scanning_push_protection_custom_link_enabled) + self.assertIsNone(self.org.secret_scanning_push_protection_enabled_for_new_repositories) + self.assertEqual(self.org.total_private_repos, 176) + self.assertIsNone(self.org.twitter_username) + self.assertEqual(self.org.two_factor_requirement_enabled, True) self.assertEqual(self.org.type, "Organization") + self.assertEqual(self.org.updated_at, datetime(2024, 8, 20, 8, 44, 26, tzinfo=timezone.utc)) self.assertEqual(self.org.url, "https://api.github.com/orgs/BeaverSoftware") self.assertEqual(repr(self.org), 'Organization(login="BeaverSoftware")') + self.assertEqual(self.org.web_commit_signoff_required, False) def testAddMembersDefaultRole(self): lyloa = self.g.get_user("lyloa") diff --git a/tests/ReplayData/Organization.setUp.txt b/tests/ReplayData/Organization.setUp.txt index 975764d097..44f784f6b0 100644 --- a/tests/ReplayData/Organization.setUp.txt +++ b/tests/ReplayData/Organization.setUp.txt @@ -6,5 +6,5 @@ None {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('content-length', '1337'), ('x-runtime-rack', '0.067917'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP'), ('x-oauth-scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('x-accepted-oauth-scopes', 'admin:org, read:org, repo, user, write:org'), ('etag', '"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('status', '200 OK'), ('x-ratelimit-remaining', '4998'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('last-modified', 'Tue, 24 Oct 2017 12:11:24 GMT'), ('date', 'Fri, 06 Apr 2018 12:54:55 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1523022613')] -{"login":"BeaverSoftware","id":1,"url":"https://api.github.com/orgs/BeaverSoftware", "repos_url":"https://api.github.com/orgs/BeaverSoftware/repos","events_url":"https://api.github .com/orgs/BeaverSoftware/events","hooks_url":"https://api.github.com/orgs/BeaverSoftware/hooks", "issues_url":"https://api.github.com/orgs/BeaverSoftware/issues","members_url":"https://api.github .com/orgs/BeaverSoftware/members{/member}","public_members_url":"https://api.github.com/orgs/BeaverSoftware/public_members{/member}","avatar_url":"https://avatars1.githubusercontent.com/u/1?v=4","description":"BeaverSoftware writes software.","name":"BeaverSoftware","company":null,"blog":"http://www.example.com","location":"Paris, France","email":"","has_organization_projects":true,"has_repository_projects":true,"public_repos":27,"public_gists":0,"followers":0,"following":0,"html_url":"https://github.com/BeaverSoftware","created_at":"2014-01-09T16:56:17Z","updated_at":"2017-10-24T12:11:24Z","type":"Organization","total_private_repos":7,"owned_private_repos":0,"private_gists":0,"disk_usage":2,"collaborators":9,"billing_email":"foo@example.com","plan":{"name":"free","space":1,"private_repos":3,"filled_seats":3,"seats":0},"default_repository_permission":"none","members_can_create_repositories":false} +[('Date', 'Sat, 04 Jan 2025 14:03:14 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"37e82d47ffd1abedecd5b2eacabdb07778a797c702d4b7d8cb628356da265fd7"'), ('Last-Modified', 'Tue, 20 Aug 2024 08:44:26 GMT'), ('X-OAuth-Scopes', 'read:discussion, repo'), ('X-Accepted-OAuth-Scopes', 'admin:org, read:org, repo, user, write:org'), ('github-authentication-token-expiration', '2025-02-04 16:42:10 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1736002780'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'DD00:44383:24E39C7F:25D8F4B0:67793FA2')] +{"login":"BeaverSoftware","id":21341965,"node_id":"AbCdEfG","url":"https://api.github.com/orgs/BeaverSoftware","repos_url":"https://api.github.com/orgs/BeaverSoftware/repos","events_url":"https://api.github.com/orgs/BeaverSoftware/events","hooks_url":"https://api.github.com/orgs/BeaverSoftware/hooks","issues_url":"https://api.github.com/orgs/BeaverSoftware/issues","members_url":"https://api.github.com/orgs/BeaverSoftware/members{/member}","public_members_url":"https://api.github.com/orgs/BeaverSoftware/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/12345678?v=4","description":"BeaverSoftware writes software.","name":"BeaverSoftware","company":null,"blog":"http://www.example.com","location":"Paris, France","email":"foo@example.com","twitter_username":null,"is_verified":false,"has_organization_projects":true,"has_repository_projects":true,"public_repos":121,"public_gists":0,"followers":130,"following":1,"html_url":"https://github.com/BeaverSoftware","created_at":"2014-01-09T16:56:17Z","updated_at":"2024-08-20T08:44:26Z","archived_at":null,"type":"Organization","total_private_repos":176,"owned_private_repos":191,"private_gists":null,"disk_usage":null,"collaborators":9,"billing_email":"foo@example.com","default_repository_permission":null,"members_can_create_repositories":false,"two_factor_requirement_enabled":true,"members_allowed_repository_creation_type":"none","members_can_create_public_repositories":false,"members_can_create_private_repositories":false,"members_can_create_internal_repositories":false,"members_can_create_pages":true,"members_can_fork_private_repositories":false,"web_commit_signoff_required":false,"deploy_keys_enabled_for_repositories":true,"members_can_create_public_pages":true,"members_can_create_private_pages":true,"plan":{"name":"enterprise","space":123456789,"private_repos":999999,"filled_seats":640,"seats":1024}}