Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

pygithub

Package Overview
Dependencies
Maintainers
3
Versions
106
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pygithub - npm Package Compare versions

Comparing version
2.4.0
to
2.5.0
+23
.github/workflows/top-issues.yaml
name: Top issues
on:
schedule:
- cron: '0 0 */1 * *'
workflow_dispatch:
jobs:
ShowAndLabelTopIssues:
name: Display and label top issues
runs-on: ubuntu-latest
if: github.repository == 'PyGithub/PyGithub'
steps:
- name: Run top issues action
uses: rickstaa/top-issues-action@7e8dda5d5ae3087670f9094b9724a9a091fc3ba1 # v1.3.101
env:
github_token: ${{ secrets.GITHUB_TOKEN }}
with:
label: true
dashboard: true
dashboard_show_total_reactions: true
top_issues: true
top_pull_requests: true
top_list_size: 10
############################ Copyrights and license ############################
# #
# Copyright 2012 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2012 Zearin <zearin@gonk.net> #
# Copyright 2013 AKFish <akfish@gmail.com> #
# Copyright 2013 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2014 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2016 Jannis Gebauer <ja.geb@me.com> #
# Copyright 2016 Peter Buckley <dx-pbuckley@users.noreply.github.com> #
# Copyright 2018 Wan Liuyang <tsfdye@gmail.com> #
# Copyright 2018 sfdye <tsfdye@gmail.com> #
# Copyright 2019 Steve Kowalik <steven@wedontsleep.org> #
# Copyright 2019 Wan Liuyang <tsfdye@gmail.com> #
# Copyright 2020 Steve Kowalik <steven@wedontsleep.org> #
# Copyright 2021 Mark Walker <mark.walker@realbuzz.com> #
# Copyright 2021 Steve Kowalik <steven@wedontsleep.org> #
# Copyright 2023 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2023 Trim21 <trim21.me@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# #
# 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 <http://www.gnu.org/licenses/>. #
# #
################################################################################
from __future__ import annotations
from datetime import datetime
from typing import Any
import github.GithubObject
import github.NamedUser
from github.GithubObject import Attribute, CompletableGithubObject, NotSet
class DiscussionBase(CompletableGithubObject):
"""
This class represents a the shared attributes between RepositoryDiscussion and TeamDiscussion
https://docs.github.com/en/graphql/reference/objects#discussion
https://docs.github.com/en/rest/reference/teams#discussions
"""
def _initAttributes(self) -> None:
self._author: Attribute[github.NamedUser.NamedUser | None] = NotSet
self._body: Attribute[str] = NotSet
self._body_html: Attribute[str] = NotSet
self._created_at: Attribute[datetime] = NotSet
self._last_edited_at: Attribute[datetime] = NotSet
self._number: Attribute[int] = NotSet
self._title: Attribute[str] = NotSet
self._updated_at: Attribute[datetime] = NotSet
self._url: Attribute[str] = NotSet
def __repr__(self) -> str:
return self.get__repr__({"number": self._number.value, "title": self._title.value})
@property
def author(self) -> github.NamedUser.NamedUser | None:
self._completeIfNotSet(self._author)
return self._author.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 created_at(self) -> datetime:
self._completeIfNotSet(self._created_at)
return self._created_at.value
@property
def last_edited_at(self) -> datetime:
self._completeIfNotSet(self._last_edited_at)
return self._last_edited_at.value
@property
def number(self) -> int:
self._completeIfNotSet(self._number)
return self._number.value
@property
def title(self) -> str:
self._completeIfNotSet(self._title)
return self._title.value
@property
def updated_at(self) -> datetime:
self._completeIfNotSet(self._updated_at)
return self._updated_at.value
@property
def url(self) -> str:
self._completeIfNotSet(self._url)
return self._url.value
def _useAttributes(self, attributes: dict[str, Any]) -> None:
if "author" in attributes: # pragma no branch
self._author = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["author"])
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 "created_at" in attributes: # pragma no branch
self._created_at = self._makeDatetimeAttribute(attributes["created_at"])
if "last_edited_at" in attributes: # pragma no branch
self._last_edited_at = self._makeDatetimeAttribute(attributes["last_edited_at"])
if "number" in attributes: # pragma no branch
self._number = self._makeIntAttribute(attributes["number"])
if "title" in attributes:
self._title = self._makeStringAttribute(attributes["title"])
if "updated_at" in attributes: # pragma no branch
self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"])
if "url" in attributes: # pragma no branch
self._url = self._makeStringAttribute(attributes["url"])
############################ Copyrights and license ############################
# #
# Copyright 2012 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2012 Zearin <zearin@gonk.net> #
# Copyright 2013 AKFish <akfish@gmail.com> #
# Copyright 2013 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2014 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2016 Jannis Gebauer <ja.geb@me.com> #
# Copyright 2016 Peter Buckley <dx-pbuckley@users.noreply.github.com> #
# Copyright 2018 Wan Liuyang <tsfdye@gmail.com> #
# Copyright 2018 sfdye <tsfdye@gmail.com> #
# Copyright 2019 Steve Kowalik <steven@wedontsleep.org> #
# Copyright 2019 Wan Liuyang <tsfdye@gmail.com> #
# Copyright 2020 Steve Kowalik <steven@wedontsleep.org> #
# Copyright 2021 Mark Walker <mark.walker@realbuzz.com> #
# Copyright 2021 Steve Kowalik <steven@wedontsleep.org> #
# Copyright 2023 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2023 Trim21 <trim21.me@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# #
# 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 <http://www.gnu.org/licenses/>. #
# #
################################################################################
from __future__ import annotations
from datetime import datetime
from typing import Any
import github.GithubObject
import github.NamedUser
from github.GithubObject import Attribute, CompletableGithubObject, NotSet
class DiscussionCommentBase(CompletableGithubObject):
"""
This class represents a the shared attributes between RepositoryDiscussionComment and TeamDiscussionComment
https://docs.github.com/en/graphql/reference/objects#discussioncomment
https://docs.github.com/de/rest/teams/discussion-comments
"""
def _initAttributes(self) -> None:
self._author: Attribute[github.NamedUser.NamedUser | None] = NotSet
self._body: Attribute[str] = NotSet
self._body_html: Attribute[str] = NotSet
self._created_at: Attribute[datetime] = NotSet
self._html_url: Attribute[str] = NotSet
self._last_edited_at: Attribute[datetime] = NotSet
self._node_id: Attribute[str] = NotSet
self._updated_at: Attribute[datetime] = NotSet
self._url: Attribute[str] = NotSet
def __repr__(self) -> str:
return self.get__repr__({"node_id": self._node_id.value})
@property
def author(self) -> github.NamedUser.NamedUser | None:
self._completeIfNotSet(self._author)
return self._author.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 created_at(self) -> datetime:
self._completeIfNotSet(self._created_at)
return self._created_at.value
@property
def html_url(self) -> str:
self._completeIfNotSet(self._html_url)
return self._html_url.value
@property
def last_edited_at(self) -> datetime:
self._completeIfNotSet(self._last_edited_at)
return self._last_edited_at.value
@property
def node_id(self) -> str:
self._completeIfNotSet(self._node_id)
return self._node_id.value
@property
def updated_at(self) -> datetime:
self._completeIfNotSet(self._updated_at)
return self._updated_at.value
@property
def url(self) -> str:
self._completeIfNotSet(self._url)
return self._url.value
def _useAttributes(self, attributes: dict[str, Any]) -> None:
if "author" in attributes: # pragma no branch
self._author = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["author"])
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 "created_at" in attributes: # pragma no branch
self._created_at = self._makeDatetimeAttribute(attributes["created_at"])
if "html_url" in attributes: # pragma no branch
self._html_url = self._makeStringAttribute(attributes["html_url"])
if "last_edited_at" in attributes: # pragma no branch
self._last_edited_at = self._makeDatetimeAttribute(attributes["last_edited_at"])
if "node_id" in attributes: # pragma no branch
self._node_id = self._makeStringAttribute(attributes["node_id"])
if "updated_at" in attributes: # pragma no branch
self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"])
if "url" in attributes: # pragma no branch
self._url = self._makeStringAttribute(attributes["url"])
############################ Copyrights and license ############################
# #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #
# 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 <http://www.gnu.org/licenses/>. #
# #
################################################################################
from __future__ import annotations
from typing import TYPE_CHECKING, Any
import github
import github.Label
import github.NamedUser
import github.Reaction
import github.Repository
import github.RepositoryDiscussionCategory
import github.RepositoryDiscussionComment
from github.DiscussionBase import DiscussionBase
from github.GithubObject import (
Attribute,
GraphQlObject,
NotSet,
as_rest_api_attributes,
as_rest_api_attributes_list,
is_undefined,
)
from github.PaginatedList import PaginatedList
if TYPE_CHECKING:
from github.Label import Label
from github.NamedUser import NamedUser
from github.Reaction import Reaction
from github.Repository import Repository
from github.RepositoryDiscussionCategory import RepositoryDiscussionCategory
from github.RepositoryDiscussionComment import RepositoryDiscussionComment
class RepositoryDiscussion(GraphQlObject, DiscussionBase):
"""
This class represents GraphQL Discussion.
The reference can be found here
https://docs.github.com/en/graphql/reference/objects#discussion
"""
def _initAttributes(self) -> None:
super()._initAttributes()
self._answer: Attribute[RepositoryDiscussionComment | None] = NotSet
self._body_text: Attribute[str] = NotSet
self._category: Attribute[RepositoryDiscussionCategory] = NotSet
self._comments_page = None
self._database_id: Attribute[int] = NotSet
self._editor: Attribute[NamedUser] = NotSet
self._id: Attribute[str] = NotSet
self._labels_page = None
self._reactions_page = None
self._repository: Attribute[Repository] = NotSet
@property
def answer(self) -> RepositoryDiscussionComment | None:
return self._answer.value
@property
def body_text(self) -> str:
return self._body_text.value
@property
def category(self) -> RepositoryDiscussionCategory:
return self._category.value
@property
def database_id(self) -> int:
return self._database_id.value
@property
def editor(self) -> NamedUser:
return self._editor.value
@property
def id(self) -> str:
return self._id.value
@property
def node_id(self) -> str:
return self.id
@property
def repository(self) -> Repository:
return self._repository.value
def get_comments(self, comment_graphql_schema: str) -> PaginatedList[RepositoryDiscussionComment]:
if self._comments_page is not None:
return PaginatedList(
github.RepositoryDiscussionComment.RepositoryDiscussionComment,
self._requester,
firstData=self._comments_page,
firstHeaders={},
)
if is_undefined(self._id):
raise RuntimeError("Retrieving discussion comments requires the discussion field 'id'")
if not comment_graphql_schema.startswith("\n"):
comment_graphql_schema = f" {comment_graphql_schema} "
query = (
"""
query Q($discussionId: ID!, $first: Int, $last: Int, $before: String, $after: String) {
node(id: $discussionId) {
... on Discussion {
comments(first: $first, last: $last, before: $before, after: $after) {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
nodes {"""
+ comment_graphql_schema
+ """}
}
}
}
}"""
)
variables = {"discussionId": self.node_id}
return PaginatedList(
github.RepositoryDiscussionComment.RepositoryDiscussionComment,
self._requester,
graphql_query=query,
graphql_variables=variables,
list_item=["node", "comments"],
)
def get_labels(self) -> PaginatedList[Label]:
if self._labels_page is None:
raise RuntimeError("Fetching labels not implemented")
return PaginatedList(github.Label.Label, self._requester, firstData=self._labels_page, firstHeaders={})
def get_reactions(self) -> PaginatedList[Reaction]:
if self._reactions_page is None:
raise RuntimeError("Fetching reactions not implemented")
return PaginatedList(github.Reaction.Reaction, self._requester, firstData=self._reactions_page, firstHeaders={})
def add_comment(
self, body: str, reply_to: RepositoryDiscussionComment | str | None = None, output_schema: str = "id"
) -> RepositoryDiscussionComment:
reply_to_id = (
reply_to.id
if isinstance(reply_to, github.RepositoryDiscussionComment.RepositoryDiscussionComment)
else reply_to
)
if not output_schema.startswith("\n"):
output_schema = f" {output_schema} "
variables = {"body": body, "discussionId": self.id, "replyToId": reply_to_id}
return self._requester.graphql_named_mutation_class(
"addDiscussionComment",
NotSet.remove_unset_items(variables),
f"comment {{{output_schema}}}",
"comment",
github.RepositoryDiscussionComment.RepositoryDiscussionComment,
)
def _useAttributes(self, attributes: dict[str, Any]) -> None:
# super class is a REST API GithubObject, attributes are coming from GraphQL
super()._useAttributes(as_rest_api_attributes(attributes))
if "answer" in attributes: # pragma no branch
self._answer = self._makeClassAttribute(
github.RepositoryDiscussionComment.RepositoryDiscussionComment, attributes["answer"]
)
if "bodyText" in attributes: # pragma no branch
self._body_text = self._makeStringAttribute(attributes["bodyText"])
if "category" in attributes: # pragma no branch
self._category = self._makeClassAttribute(
github.RepositoryDiscussionCategory.RepositoryDiscussionCategory, attributes["category"]
)
if "comments" in attributes: # pragma no branch
# comments are GraphQL API objects
self._comments_page = attributes["comments"]["nodes"]
if "databaseId" in attributes: # pragma no branch
self._database_id = self._makeIntAttribute(attributes["databaseId"])
if "editor" in attributes: # pragma no branch
self._editor = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["editor"])
if "id" in attributes: # pragma no branch
self._id = self._makeStringAttribute(attributes["id"])
if "labels" in attributes: # pragma no branch
# labels are REST API objects
self._labels_page = as_rest_api_attributes_list(attributes["labels"]["nodes"]) # type: ignore
if "reactions" in attributes: # pragma no branch
# reactions are REST API objects
self._reactions_page = as_rest_api_attributes_list(attributes["reactions"]["nodes"]) # type: ignore
if "repository" in attributes: # pragma no branch
self._repository = self._makeClassAttribute(
github.Repository.Repository, as_rest_api_attributes(attributes["repository"])
)
############################ Copyrights and license ############################
# #
# Copyright 2012 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2012 Zearin <zearin@gonk.net> #
# Copyright 2013 AKFish <akfish@gmail.com> #
# Copyright 2013 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2014 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2016 Jannis Gebauer <ja.geb@me.com> #
# Copyright 2016 Peter Buckley <dx-pbuckley@users.noreply.github.com> #
# Copyright 2018 Wan Liuyang <tsfdye@gmail.com> #
# Copyright 2018 sfdye <tsfdye@gmail.com> #
# Copyright 2019 Steve Kowalik <steven@wedontsleep.org> #
# Copyright 2019 Wan Liuyang <tsfdye@gmail.com> #
# Copyright 2020 Steve Kowalik <steven@wedontsleep.org> #
# Copyright 2020 Victor Zeng <zacker150@users.noreply.github.com> #
# Copyright 2022 Eric Nieuwland <eric.nieuwland@gmail.com> #
# Copyright 2023 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2023 Trim21 <trim21.me@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# #
# 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 <http://www.gnu.org/licenses/>. #
# #
################################################################################
from __future__ import annotations
from datetime import datetime
from typing import TYPE_CHECKING, Any
import github.Reaction
from github.GithubObject import Attribute, GraphQlObject, NonCompletableGithubObject, NotSet, as_rest_api_attributes
if TYPE_CHECKING:
from github.Repository import Repository
class RepositoryDiscussionCategory(GraphQlObject, NonCompletableGithubObject):
"""
This class represents GraphQL DiscussionCategory.
The reference can be found here
https://docs.github.com/en/graphql/reference/objects#discussioncategory
"""
def _initAttributes(self) -> None:
self._created_at: Attribute[datetime] = NotSet
self._description: Attribute[str] = NotSet
self._emoji: Attribute[str] = NotSet
self._emoji_html: Attribute[str] = NotSet
self._id: Attribute[str] = NotSet
self._is_answerable: Attribute[bool] = NotSet
self._name: Attribute[str] = NotSet
self._repository: Attribute[Repository] = NotSet
self._slug: Attribute[str] = NotSet
self._updated_at: Attribute[datetime] = NotSet
@property
def created_at(self) -> datetime:
return self._created_at.value
@property
def description(self) -> str:
return self._description.value
@property
def emoji(self) -> str:
return self._emoji.value
@property
def emoji_html(self) -> str:
return self._emoji_html.value
@property
def id(self) -> str:
return self._id.value
@property
def node_id(self) -> str:
return self.id
@property
def is_answerable(self) -> bool:
return self._is_answerable.value
@property
def name(self) -> str:
return self._name.value
@property
def repository(self) -> Repository:
return self._repository.value
@property
def slug(self) -> str:
return self._slug.value
@property
def updated_at(self) -> datetime:
return self._updated_at.value
def _useAttributes(self, attributes: dict[str, Any]) -> None:
if "createdAt" in attributes: # pragma no branch
self._created_at = self._makeDatetimeAttribute(attributes["createdAt"])
if "description" in attributes: # pragma no branch
self._description = self._makeStringAttribute(attributes["description"])
if "emoji" in attributes: # pragma no branch
self._emoji = self._makeStringAttribute(attributes["emoji"])
if "emojiHTML" in attributes: # pragma no branch
self._emoji_html = self._makeStringAttribute(attributes["emojiHTML"])
if "id" in attributes: # pragma no branch
self._id = self._makeStringAttribute(attributes["id"])
if "isAnswerable" in attributes: # pragma no branch
self._is_answerable = self._makeBoolAttribute(attributes["isAnswerable"])
if "name" in attributes: # pragma no branch
self._name = self._makeStringAttribute(attributes["name"])
if "repository" in attributes: # pragma no branch
# repository is a REST API object
self._repository = self._makeClassAttribute(
github.Repository.Repository, as_rest_api_attributes(attributes["repository"])
)
if "slug" in attributes: # pragma no branch
self._slug = self._makeStringAttribute(attributes["slug"])
if "updatedAt" in attributes: # pragma no branch
self._updated_at = self._makeDatetimeAttribute(attributes["updatedAt"])
############################ Copyrights and license ############################
# #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #
# 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 <http://www.gnu.org/licenses/>. #
# #
################################################################################
from __future__ import annotations
from typing import TYPE_CHECKING, Any
import github.NamedUser
import github.Reaction
from github.DiscussionCommentBase import DiscussionCommentBase
from github.GithubObject import (
Attribute,
GraphQlObject,
NotSet,
as_rest_api_attributes,
as_rest_api_attributes_list,
is_defined,
)
from github.PaginatedList import PaginatedList
if TYPE_CHECKING:
from github.NamedUser import NamedUser
from github.Reaction import Reaction
from github.RepositoryDiscussion import RepositoryDiscussion
class RepositoryDiscussionComment(GraphQlObject, DiscussionCommentBase):
"""
This class represents GraphQL DiscussionComment.
The reference can be found here
https://docs.github.com/en/graphql/reference/objects#discussioncomment
"""
def _initAttributes(self) -> None:
super()._initAttributes()
self._body_text: Attribute[str] = NotSet
self._database_id: Attribute[int] = NotSet
self._discussion: Attribute[RepositoryDiscussion]
self._editor: Attribute[NamedUser] = NotSet
self._id: Attribute[str] = NotSet
self._reactions_page = None
self._replies_page = None
@property
def body_text(self) -> str:
return self._body_text.value
@property
def database_id(self) -> int:
return self._database_id.value
@property
def discussion(self) -> RepositoryDiscussion:
return self._discussion.value
@property
def editor(self) -> NamedUser:
return self._editor.value
@property
def id(self) -> str:
return self._id.value
@property
def node_id(self) -> str:
if is_defined(self._node_id):
return super().node_id
return self.id
def get_reactions(self) -> PaginatedList[Reaction]:
if self._reactions_page is None:
raise RuntimeError("Fetching reactions not implemented")
return PaginatedList(github.Reaction.Reaction, self._requester, firstData=self._reactions_page, firstHeaders={})
def get_replies(self) -> PaginatedList[RepositoryDiscussionComment]:
if self._replies_page is None:
raise RuntimeError("Fetching replies not implemented")
return PaginatedList(
RepositoryDiscussionComment, self._requester, firstData=self._replies_page, firstHeaders={}
)
def edit(self, body: str, output_schema: str = "id") -> RepositoryDiscussionComment:
if not output_schema.startswith("\n"):
output_schema = f" {output_schema} "
return self._requester.graphql_named_mutation_class(
"updateDiscussionComment",
{"commentId": self.node_id, "body": body},
f"comment {{{output_schema}}}",
"comment",
github.RepositoryDiscussionComment.RepositoryDiscussionComment,
)
def delete(self, output_schema: str = "id") -> RepositoryDiscussionComment:
if not output_schema.startswith("\n"):
output_schema = f" {output_schema} "
return self._requester.graphql_named_mutation_class(
"deleteDiscussionComment",
{"id": self.id},
f"comment {{{output_schema}}}",
"comment",
github.RepositoryDiscussionComment.RepositoryDiscussionComment,
)
def _useAttributes(self, attributes: dict[str, Any]) -> None:
# super class is a REST API GithubObject, attributes are coming from GraphQL
super()._useAttributes(as_rest_api_attributes(attributes))
if "bodyText" in attributes: # pragma no branch
self._body_text = self._makeStringAttribute(attributes["bodyText"])
if "databaseId" in attributes: # pragma no branch
self._database_id = self._makeIntAttribute(attributes["databaseId"])
if "discussion" in attributes: # pragma no branch
# RepositoryDiscussion is a GraphQL API object
self._discussion = self._makeClassAttribute(
github.RepositoryDiscussion.RepositoryDiscussion, attributes["discussion"]
)
if "editor" in attributes: # pragma no branch
# NamedUser is a REST API object
self._editor = self._makeClassAttribute(
github.NamedUser.NamedUser, as_rest_api_attributes(attributes["editor"])
)
if "id" in attributes: # pragma no branch
self._id = self._makeStringAttribute(attributes["id"])
if "reactions" in attributes: # pragma no branch
# reactions are REST API objects
self._reactions_page = as_rest_api_attributes_list(attributes["reactions"]["nodes"]) # type: ignore
if "replies" in attributes: # pragma no branch
# replies are GraphQL API objects
self._replies_page = attributes["replies"]["nodes"]
https
GET
api.github.com
None
/user/memberships/orgs
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Date', 'Mon, 09 Sep 2024 14:56:03 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/"64a96e0eaa998b8a898ced522b64494c065bb32b4c0768d689b9b98b2fa849c1"'), ('X-OAuth-Scopes', 'gist, read:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'admin:org, read:org, repo, user, write:org'), ('x-oauth-client-id', '178c6fc778ccc68e1d6a'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1725895359'), ('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', '2721:3E994B:103429F2:106C9200:66DF0C83')]
[{"url":"https://api.github.com/orgs/aneyem-github/memberships/eduramirezh","state":"active","role":"member","organization_url":"https://api.github.com/orgs/aneyem-github","user":{"login":"eduramirezh","id":1679647,"node_id":"MDQ6VXNlcjE2Nzk2NDc=","avatar_url":"https://avatars.githubusercontent.com/u/1679647?v=4","gravatar_id":"","url":"https://api.github.com/users/eduramirezh","html_url":"https://github.com/eduramirezh","followers_url":"https://api.github.com/users/eduramirezh/followers","following_url":"https://api.github.com/users/eduramirezh/following{/other_user}","gists_url":"https://api.github.com/users/eduramirezh/gists{/gist_id}","starred_url":"https://api.github.com/users/eduramirezh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduramirezh/subscriptions","organizations_url":"https://api.github.com/users/eduramirezh/orgs","repos_url":"https://api.github.com/users/eduramirezh/repos","events_url":"https://api.github.com/users/eduramirezh/events{/privacy}","received_events_url":"https://api.github.com/users/eduramirezh/received_events","type":"User","site_admin":false},"organization":{"login":"aneyem-github","id":1649871,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDk4NzE=","url":"https://api.github.com/orgs/aneyem-github","repos_url":"https://api.github.com/orgs/aneyem-github/repos","events_url":"https://api.github.com/orgs/aneyem-github/events","hooks_url":"https://api.github.com/orgs/aneyem-github/hooks","issues_url":"https://api.github.com/orgs/aneyem-github/issues","members_url":"https://api.github.com/orgs/aneyem-github/members{/member}","public_members_url":"https://api.github.com/orgs/aneyem-github/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/1649871?v=4","description":null}},{"url":"https://api.github.com/orgs/nko4/memberships/eduramirezh","state":"active","role":"member","organization_url":"https://api.github.com/orgs/nko4","user":{"login":"eduramirezh","id":1679647,"node_id":"MDQ6VXNlcjE2Nzk2NDc=","avatar_url":"https://avatars.githubusercontent.com/u/1679647?v=4","gravatar_id":"","url":"https://api.github.com/users/eduramirezh","html_url":"https://github.com/eduramirezh","followers_url":"https://api.github.com/users/eduramirezh/followers","following_url":"https://api.github.com/users/eduramirezh/following{/other_user}","gists_url":"https://api.github.com/users/eduramirezh/gists{/gist_id}","starred_url":"https://api.github.com/users/eduramirezh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduramirezh/subscriptions","organizations_url":"https://api.github.com/users/eduramirezh/orgs","repos_url":"https://api.github.com/users/eduramirezh/repos","events_url":"https://api.github.com/users/eduramirezh/events{/privacy}","received_events_url":"https://api.github.com/users/eduramirezh/received_events","type":"User","site_admin":false},"organization":{"login":"nko4","id":3877928,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4Nzc5Mjg=","url":"https://api.github.com/orgs/nko4","repos_url":"https://api.github.com/orgs/nko4/repos","events_url":"https://api.github.com/orgs/nko4/events","hooks_url":"https://api.github.com/orgs/nko4/hooks","issues_url":"https://api.github.com/orgs/nko4/issues","members_url":"https://api.github.com/orgs/nko4/members{/member}","public_members_url":"https://api.github.com/orgs/nko4/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/3877928?v=4","description":null}},{"url":"https://api.github.com/orgs/geoservel/memberships/eduramirezh","state":"active","role":"admin","organization_url":"https://api.github.com/orgs/geoservel","user":{"login":"eduramirezh","id":1679647,"node_id":"MDQ6VXNlcjE2Nzk2NDc=","avatar_url":"https://avatars.githubusercontent.com/u/1679647?v=4","gravatar_id":"","url":"https://api.github.com/users/eduramirezh","html_url":"https://github.com/eduramirezh","followers_url":"https://api.github.com/users/eduramirezh/followers","following_url":"https://api.github.com/users/eduramirezh/following{/other_user}","gists_url":"https://api.github.com/users/eduramirezh/gists{/gist_id}","starred_url":"https://api.github.com/users/eduramirezh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduramirezh/subscriptions","organizations_url":"https://api.github.com/users/eduramirezh/orgs","repos_url":"https://api.github.com/users/eduramirezh/repos","events_url":"https://api.github.com/users/eduramirezh/events{/privacy}","received_events_url":"https://api.github.com/users/eduramirezh/received_events","type":"User","site_admin":false},"organization":{"login":"geoservel","id":6774673,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY3NzQ2NzM=","url":"https://api.github.com/orgs/geoservel","repos_url":"https://api.github.com/orgs/geoservel/repos","events_url":"https://api.github.com/orgs/geoservel/events","hooks_url":"https://api.github.com/orgs/geoservel/hooks","issues_url":"https://api.github.com/orgs/geoservel/issues","members_url":"https://api.github.com/orgs/geoservel/members{/member}","public_members_url":"https://api.github.com/orgs/geoservel/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/6774673?v=4","description":null}},{"url":"https://api.github.com/orgs/iic2154-uc-cl/memberships/eduramirezh","state":"active","role":"member","organization_url":"https://api.github.com/orgs/iic2154-uc-cl","user":{"login":"eduramirezh","id":1679647,"node_id":"MDQ6VXNlcjE2Nzk2NDc=","avatar_url":"https://avatars.githubusercontent.com/u/1679647?v=4","gravatar_id":"","url":"https://api.github.com/users/eduramirezh","html_url":"https://github.com/eduramirezh","followers_url":"https://api.github.com/users/eduramirezh/followers","following_url":"https://api.github.com/users/eduramirezh/following{/other_user}","gists_url":"https://api.github.com/users/eduramirezh/gists{/gist_id}","starred_url":"https://api.github.com/users/eduramirezh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduramirezh/subscriptions","organizations_url":"https://api.github.com/users/eduramirezh/orgs","repos_url":"https://api.github.com/users/eduramirezh/repos","events_url":"https://api.github.com/users/eduramirezh/events{/privacy}","received_events_url":"https://api.github.com/users/eduramirezh/received_events","type":"User","site_admin":false},"organization":{"login":"iic2154-uc-cl","id":7002324,"node_id":"MDEyOk9yZ2FuaXphdGlvbjcwMDIzMjQ=","url":"https://api.github.com/orgs/iic2154-uc-cl","repos_url":"https://api.github.com/orgs/iic2154-uc-cl/repos","events_url":"https://api.github.com/orgs/iic2154-uc-cl/events","hooks_url":"https://api.github.com/orgs/iic2154-uc-cl/hooks","issues_url":"https://api.github.com/orgs/iic2154-uc-cl/issues","members_url":"https://api.github.com/orgs/iic2154-uc-cl/members{/member}","public_members_url":"https://api.github.com/orgs/iic2154-uc-cl/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/7002324?v=4","description":""}},{"url":"https://api.github.com/orgs/nnodes/memberships/eduramirezh","state":"active","role":"member","organization_url":"https://api.github.com/orgs/nnodes","user":{"login":"eduramirezh","id":1679647,"node_id":"MDQ6VXNlcjE2Nzk2NDc=","avatar_url":"https://avatars.githubusercontent.com/u/1679647?v=4","gravatar_id":"","url":"https://api.github.com/users/eduramirezh","html_url":"https://github.com/eduramirezh","followers_url":"https://api.github.com/users/eduramirezh/followers","following_url":"https://api.github.com/users/eduramirezh/following{/other_user}","gists_url":"https://api.github.com/users/eduramirezh/gists{/gist_id}","starred_url":"https://api.github.com/users/eduramirezh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduramirezh/subscriptions","organizations_url":"https://api.github.com/users/eduramirezh/orgs","repos_url":"https://api.github.com/users/eduramirezh/repos","events_url":"https://api.github.com/users/eduramirezh/events{/privacy}","received_events_url":"https://api.github.com/users/eduramirezh/received_events","type":"User","site_admin":false},"organization":{"login":"nnodes","id":12845538,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyODQ1NTM4","url":"https://api.github.com/orgs/nnodes","repos_url":"https://api.github.com/orgs/nnodes/repos","events_url":"https://api.github.com/orgs/nnodes/events","hooks_url":"https://api.github.com/orgs/nnodes/hooks","issues_url":"https://api.github.com/orgs/nnodes/issues","members_url":"https://api.github.com/orgs/nnodes/members{/member}","public_members_url":"https://api.github.com/orgs/nnodes/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/12845538?v=4","description":""}},{"url":"https://api.github.com/orgs/sushiclm/memberships/eduramirezh","state":"active","role":"admin","organization_url":"https://api.github.com/orgs/sushiclm","user":{"login":"eduramirezh","id":1679647,"node_id":"MDQ6VXNlcjE2Nzk2NDc=","avatar_url":"https://avatars.githubusercontent.com/u/1679647?v=4","gravatar_id":"","url":"https://api.github.com/users/eduramirezh","html_url":"https://github.com/eduramirezh","followers_url":"https://api.github.com/users/eduramirezh/followers","following_url":"https://api.github.com/users/eduramirezh/following{/other_user}","gists_url":"https://api.github.com/users/eduramirezh/gists{/gist_id}","starred_url":"https://api.github.com/users/eduramirezh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduramirezh/subscriptions","organizations_url":"https://api.github.com/users/eduramirezh/orgs","repos_url":"https://api.github.com/users/eduramirezh/repos","events_url":"https://api.github.com/users/eduramirezh/events{/privacy}","received_events_url":"https://api.github.com/users/eduramirezh/received_events","type":"User","site_admin":false},"organization":{"login":"sushiclm","id":22522358,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyNTIyMzU4","url":"https://api.github.com/orgs/sushiclm","repos_url":"https://api.github.com/orgs/sushiclm/repos","events_url":"https://api.github.com/orgs/sushiclm/events","hooks_url":"https://api.github.com/orgs/sushiclm/hooks","issues_url":"https://api.github.com/orgs/sushiclm/issues","members_url":"https://api.github.com/orgs/sushiclm/members{/member}","public_members_url":"https://api.github.com/orgs/sushiclm/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/22522358?v=4","description":null}}]
https
POST
api.github.com
None
/graphql
{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n ... on Discussion {\n answer {\n author { login }\n body\n bodyHTML\n bodyText\n createdAt\n databaseId\n discussion { id }\n editor { login }\n id\n lastEditedAt\n updatedAt\n url\n }\n author { login }\n body\n bodyHTML\n bodyText\n category {\n createdAt\n description\n emoji\n emojiHTML\n id\n isAnswerable\n name\n repository { owner { login } name }\n slug\n updatedAt\n }\n comments(first: 10) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n id\n }\n }\n createdAt\n databaseId\n editor { login }\n id\n labels(first: 10) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n id\n name\n }\n }\n lastEditedAt\n number\n reactions(first: 10) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n id\n }\n }\n repository {\n owner { login }\n name\n }\n title\n updatedAt\n url\n }\n }\n }\n ", "variables": {"id": "D_kwDOADYVqs4ATJZD"}}
200
[('Date', 'Tue, 17 Sep 2024 10:38:06 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4900'), ('X-RateLimit-Reset', '1726571100'), ('X-RateLimit-Used', '100'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FE8:23B8E4:7E3FE1:7F58C1:66E95C0D')]
{"data":{"node":{"answer":null,"author":{"login":"arunanandhan"},"body":"Is there an api way to search for a string in the current code in a repo?","bodyHTML":"<p dir=\"auto\">Is there an api way to search for a string in the current code in a repo?</p>","bodyText":"Is there an api way to search for a string in the current code in a repo?","category":{"createdAt":"2020-12-08T23:29:12Z","description":"Chat about anything and everything here","emoji":":speech_balloon:","emojiHTML":"<div>💬</div>","id":"MDE4OkRpc2N1c3Npb25DYXRlZ29yeTMyMDI5MDYw","isAnswerable":false,"name":"General","repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"slug":"general","updatedAt":"2020-12-08T23:29:12Z"},"comments":{"totalCount":1,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyMy0wMy0yOVQxOTo1NzowMCswMjowMM4AU3Mg","endCursor":"Y3Vyc29yOnYyOpK5MjAyMy0wMy0yOVQxOTo1NzowMCswMjowMM4AU3Mg","hasNextPage":false,"hasPreviousPage":false},"nodes":[{"id":"DC_kwDOADYVqs4AU3Mg"}]},"createdAt":"2023-03-29T17:06:04Z","databaseId":5019203,"editor":null,"id":"D_kwDOADYVqs4ATJZD","labels":{"totalCount":0,"pageInfo":{"startCursor":null,"endCursor":null,"hasNextPage":false,"hasPreviousPage":false},"nodes":[]},"lastEditedAt":null,"number":2480,"reactions":{"totalCount":0,"pageInfo":{"startCursor":null,"endCursor":null,"hasNextPage":false,"hasPreviousPage":false},"nodes":[]},"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Is there a way to search if a string present in default branch?","updatedAt":"2023-03-30T16:18:59Z","url":"https://github.com/PyGithub/PyGithub/discussions/2480"}}}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub
{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Date', 'Tue, 17 Sep 2024 10:46:13 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/"c8e45d1a983f482b7c91fe66326bb90a746e7a7d4592af657e9f4076fc3c4466"'), ('Last-Modified', 'Tue, 17 Sep 2024 06:27:32 GMT'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4986'), ('X-RateLimit-Reset', '1726571099'), ('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', '7F3C:221185:24F04:25557:66E95DF5')]
{"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":"2024-09-17T06:27:32Z","pushed_at":"2024-09-12T10:47:45Z","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":16092,"stargazers_count":6905,"watchers_count":6905,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1762,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":341,"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":1762,"open_issues":341,"watchers":6905,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","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","site_admin":false},"network_count":1762,"subscribers_count":111}
https
GET
api.github.com
None
/users/PyGithub
{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Date', 'Tue, 17 Sep 2024 10:46:30 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/"465119d1ce50dcf055ebf9239f79701d2b350d57bbf6167bb01ef9090f200a35"'), ('Last-Modified', 'Wed, 08 Apr 2020 03:46:04 GMT'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4985'), ('X-RateLimit-Reset', '1726571099'), ('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', '7FB4:93EBB:19600:19AC7:66E95E06')]
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation Mutation($input: FollowOrganizationInput!) { followOrganization(input: $input) { organization { name } } }", "variables": {"input": {"organizationId": "O_kgDOAKxBpA"}}}
200
[('Date', 'Wed, 18 Sep 2024 08:32:30 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org, user:follow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4985'), ('X-RateLimit-Reset', '1726649567'), ('X-RateLimit-Used', '15'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FCF:3E9DF7:5C04D:5CF8C:66EA901E')]
{"data":{"followOrganization":{"organization":{"name":"PyGithub"}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation Mutation($input: FollowOrganizationInput!) { followOrganization(input: $input) { organization { name } } }", "variables": {"input": {"organizationId": "O_kgDOAKxBpA"}}}
200
[('Date', 'Wed, 18 Sep 2024 08:33:14 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org, user:follow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4984'), ('X-RateLimit-Reset', '1726649567'), ('X-RateLimit-Used', '16'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F65:1B2122:68DCF:69F2E:66EA904A')]
{"data":{"followOrganization":{"organization":{"name":"PyGithub"}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on Discussion { title }\n }\n }\n ", "variables": {"id": "D_kwDOADYVqs4ATJZD"}}
200
[('Date', 'Tue, 17 Sep 2024 18:12:07 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1726598744'), ('X-RateLimit-Used', '18'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FAB:3166F9:53E3E2:54CFDB:66E9C677')]
{"data":{"node":{"__typename":"Discussion","title":"Is there a way to search if a string present in default branch?"}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on Discussion { title }\n }\n }\n ", "variables": {"id": "D_abcdefgh"}}
200
[('Date', 'Tue, 17 Sep 2024 18:12:16 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1726598744'), ('X-RateLimit-Used', '19'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FF2:3166F9:5409E6:54F641:66E9C680')]
{"data":{"node":null},"errors":[{"type":"NOT_FOUND","path":["node"],"locations":[{"line":3,"column":15}],"message":"Could not resolve to a node with the global id of 'D_abcdefgh'"}]}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on User { login }\n }\n }\n ", "variables": {"id": "D_kwDOADYVqs4ATJZD"}}
200
[('Date', 'Tue, 17 Sep 2024 18:12:29 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1726598744'), ('X-RateLimit-Used', '20'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F46:1ED26E:57A112:5890ED:66E9C68D')]
{"data":{"node":{"__typename":"Discussion"}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on Discussion { title }\n }\n }\n ", "variables": {"id": "D_kwDOADYVqs4ATJZD"}}
200
[('Date', 'Tue, 17 Sep 2024 18:12:07 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1726598744'), ('X-RateLimit-Used', '18'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FAB:3166F9:53E3E2:54CFDB:66E9C677')]
{"data":{"node":{"__typename":"Discussion","title":"Is there a way to search if a string present in default branch?"}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on Discussion { title }\n }\n }\n ", "variables": {"id": "D_abcdefgh"}}
200
[('Date', 'Tue, 17 Sep 2024 18:12:16 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1726598744'), ('X-RateLimit-Used', '19'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FF2:3166F9:5409E6:54F641:66E9C680')]
{"data":{"node":null},"errors":[{"type":"NOT_FOUND","path":["node"],"locations":[{"line":3,"column":15}],"message":"Could not resolve to a node with the global id of 'D_abcdefgh'"}]}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on User { login }\n }\n }\n ", "variables": {"id": "D_kwDOADYVqs4ATJZD"}}
200
[('Date', 'Tue, 17 Sep 2024 18:12:29 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1726598744'), ('X-RateLimit-Used', '20'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F46:1ED26E:57A112:5890ED:66E9C68D')]
{"data":{"node":{"__typename":"Discussion"}}}

Sorry, the diff of this file is too big to display

https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($owner: String!, $name: String!) {\n repository(owner: $owner, name: $name) { url }\n }", "variables": {"owner": "PyGithub", "name": "PyGithub"}}
200
[('Date', 'Tue, 17 Sep 2024 18:26:35 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4979'), ('X-RateLimit-Reset', '1726598744'), ('X-RateLimit-Used', '21'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FA1:2B9D7D:FDA0F:1007DB:66E9C9DA')]
{"data":{"repository":{"url":"https://github.com/PyGithub/PyGithub"}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) { ... on DiscussionComment { url } }\n }", "variables": {"id": "DC_kwDOADYVqs4AU3Mg"}}
200
[('Date', 'Tue, 17 Sep 2024 18:58:31 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4990'), ('X-RateLimit-Reset', '1726602697'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F30:39A73C:87FC61:8965EC:66E9D157')]
{"data":{"node":{"url":"https://github.com/PyGithub/PyGithub/discussions/2480#discussioncomment-5468960"}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($owner: String!, $name: String!) {\n repository(owner: $owner, name: $name) { url }\n }", "variables": {"owner": "PyGithub", "name": "PyGithub"}}
200
[('Date', 'Tue, 17 Sep 2024 18:58:30 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1726602697'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F17:39A73C:87FB5E:8964DF:66E9D156')]
{"data":{"repository":{"url":"https://github.com/PyGithub/PyGithub"}}}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 14:52:48 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/"94888ce5a3d160469b34ae27aa79ff2642ab71edc8d18fa2c5e192dba4611de2"'), ('Last-Modified', 'Sun, 24 Mar 2024 11:25:21 GMT'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('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', '4986'), ('X-RateLimit-Reset', '1711294214'), ('X-RateLimit-Used', '14'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D022:1444A0:4E24293:4E97CA4:66003E40')]
{"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":"2024-03-24T11:25:21Z","pushed_at":"2024-03-24T14:24:51Z","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":15776,"stargazers_count":6627,"watchers_count":6627,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1703,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":282,"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":1703,"open_issues":282,"watchers":6627,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"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","site_admin":false},"network_count":1703,"subscribers_count":111}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub/issues/1136
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 14:52:49 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/"2c247e53efccb989fff0f942a0fdeca97bb8705c2124682f3b8c2e790d7b8370"'), ('Last-Modified', 'Sun, 24 Mar 2024 14:00:06 GMT'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'issues=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4985'), ('X-RateLimit-Reset', '1711294214'), ('X-RateLimit-Used', '15'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D032:1B371B:52B6395:53292C9:66003E41')]
{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/events","html_url":"https://github.com/PyGithub/PyGithub/issues/1136","id":454822411,"node_id":"MDU6SXNzdWU0NTQ4MjI0MTE=","number":1136,"title":"Paginated list reversed only gives the first page of results backwards","user":{"login":"micahsteinberg","id":31256235,"node_id":"MDQ6VXNlcjMxMjU2MjM1","avatar_url":"https://avatars.githubusercontent.com/u/31256235?v=4","gravatar_id":"","url":"https://api.github.com/users/micahsteinberg","html_url":"https://github.com/micahsteinberg","followers_url":"https://api.github.com/users/micahsteinberg/followers","following_url":"https://api.github.com/users/micahsteinberg/following{/other_user}","gists_url":"https://api.github.com/users/micahsteinberg/gists{/gist_id}","starred_url":"https://api.github.com/users/micahsteinberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/micahsteinberg/subscriptions","organizations_url":"https://api.github.com/users/micahsteinberg/orgs","repos_url":"https://api.github.com/users/micahsteinberg/repos","events_url":"https://api.github.com/users/micahsteinberg/events{/privacy}","received_events_url":"https://api.github.com/users/micahsteinberg/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":7,"created_at":"2019-06-11T17:47:23Z","updated_at":"2024-03-24T14:00:06Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"When I do\r\n```\r\ng = Github(\"xxx\")\r\nrepo = g.get_repo(\"xxx\")\r\n\r\nfor comm in repo.get_commits(since=datetime).reversed:\r\n ....\r\n```\r\nit only goes through the most recent 30 results in reverse order.\r\n\r\nI was able to fix this with\r\n```\r\ndef reverse_github_results(paginated_list):\r\n for i in range(paginated_list.totalCount//30, -1, -1):\r\n page = paginated_list.get_page(i)\r\n page.reverse()\r\n for item in page:\r\n yield item\r\n```\r\nbut this possibly runs a bit slower and I thought I should let you guys know\r\n","closed_by":{"login":"stale[bot]","id":26384082,"node_id":"MDM6Qm90MjYzODQwODI=","avatar_url":"https://avatars.githubusercontent.com/in/1724?v=4","gravatar_id":"","url":"https://api.github.com/users/stale%5Bbot%5D","html_url":"https://github.com/apps/stale","followers_url":"https://api.github.com/users/stale%5Bbot%5D/followers","following_url":"https://api.github.com/users/stale%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/stale%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/stale%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stale%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/stale%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/stale%5Bbot%5D/repos","events_url":"https://api.github.com/users/stale%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/stale%5Bbot%5D/received_events","type":"Bot","site_admin":false},"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/reactions","total_count":7,"+1":7,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/timeline","performed_via_github_app":null,"state_reason":"reopened"}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub/issues/1136/comments?per_page=3
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 14:52:49 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/"57c5d41745d1850a5668491fc82543958ec801d97e5eeb55f7f8da49da691fce"'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '<https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=2>; rel="next", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=3>; rel="last"'), ('x-accepted-github-permissions', 'issues=read; pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4984'), ('X-RateLimit-Reset', '1711294214'), ('X-RateLimit-Used', '16'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D034:C40A4:5108CDA:517C9AC:66003E41')]
[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/520169504","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-520169504","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":520169504,"node_id":"MDEyOklzc3VlQ29tbWVudDUyMDE2OTUwNA==","user":{"login":"stale[bot]","id":26384082,"node_id":"MDM6Qm90MjYzODQwODI=","avatar_url":"https://avatars.githubusercontent.com/in/1724?v=4","gravatar_id":"","url":"https://api.github.com/users/stale%5Bbot%5D","html_url":"https://github.com/apps/stale","followers_url":"https://api.github.com/users/stale%5Bbot%5D/followers","following_url":"https://api.github.com/users/stale%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/stale%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/stale%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stale%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/stale%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/stale%5Bbot%5D/repos","events_url":"https://api.github.com/users/stale%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/stale%5Bbot%5D/received_events","type":"Bot","site_admin":false},"created_at":"2019-08-10T18:16:46Z","updated_at":"2019-08-10T18:16:46Z","author_association":"NONE","body":"This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/520169504/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879739410","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-1879739410","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":1879739410,"node_id":"IC_kwDOADYVqs5wCowS","user":{"login":"engn33r","id":6261182,"node_id":"MDQ6VXNlcjYyNjExODI=","avatar_url":"https://avatars.githubusercontent.com/u/6261182?v=4","gravatar_id":"","url":"https://api.github.com/users/engn33r","html_url":"https://github.com/engn33r","followers_url":"https://api.github.com/users/engn33r/followers","following_url":"https://api.github.com/users/engn33r/following{/other_user}","gists_url":"https://api.github.com/users/engn33r/gists{/gist_id}","starred_url":"https://api.github.com/users/engn33r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/engn33r/subscriptions","organizations_url":"https://api.github.com/users/engn33r/orgs","repos_url":"https://api.github.com/users/engn33r/repos","events_url":"https://api.github.com/users/engn33r/events{/privacy}","received_events_url":"https://api.github.com/users/engn33r/received_events","type":"User","site_admin":false},"created_at":"2024-01-06T16:04:34Z","updated_at":"2024-01-06T16:04:34Z","author_association":"NONE","body":"This was still an issue with v2.1.1 but the fix above worked for me :+1:\r\n\r\nIt would be great if this could be fixed in the library itself, with an example showing reversed usage in the docs.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879739410/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879763065","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-1879763065","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":1879763065,"node_id":"IC_kwDOADYVqs5wCuh5","user":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"https://avatars.githubusercontent.com/u/44700269?v=4","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"https://github.com/EnricoMi","followers_url":"https://api.github.com/users/EnricoMi/followers","following_url":"https://api.github.com/users/EnricoMi/following{/other_user}","gists_url":"https://api.github.com/users/EnricoMi/gists{/gist_id}","starred_url":"https://api.github.com/users/EnricoMi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EnricoMi/subscriptions","organizations_url":"https://api.github.com/users/EnricoMi/orgs","repos_url":"https://api.github.com/users/EnricoMi/repos","events_url":"https://api.github.com/users/EnricoMi/events{/privacy}","received_events_url":"https://api.github.com/users/EnricoMi/received_events","type":"User","site_admin":false},"created_at":"2024-01-06T17:34:11Z","updated_at":"2024-01-06T17:36:10Z","author_association":"COLLABORATOR","body":"I'd be surprised this does not work, there are some unit tests that cover this. Maybe test data have to be recorded again. Reopening, contribution welcome.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879763065/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]
https
GET
api.github.com
None
/repositories/3544490/issues/1136/comments?per_page=3&page=2
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 14:52:50 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/"2da0c87bcdd4e81333c2bcff3919dd02c1f530d83d1f8b34300ce6bd4fcaea47"'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '<https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=1>; rel="prev", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=3>; rel="next", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=3>; rel="last", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=1>; rel="first"'), ('x-accepted-github-permissions', 'issues=read; pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4983'), ('X-RateLimit-Reset', '1711294214'), ('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'), ('X-GitHub-Request-Id', 'D042:150D4C:539B908:540EA4A:66003E42')]
[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2009839192","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-2009839192","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":2009839192,"node_id":"IC_kwDOADYVqs53y7ZY","user":{"login":"etiennnr","id":36542216,"node_id":"MDQ6VXNlcjM2NTQyMjE2","avatar_url":"https://avatars.githubusercontent.com/u/36542216?v=4","gravatar_id":"","url":"https://api.github.com/users/etiennnr","html_url":"https://github.com/etiennnr","followers_url":"https://api.github.com/users/etiennnr/followers","following_url":"https://api.github.com/users/etiennnr/following{/other_user}","gists_url":"https://api.github.com/users/etiennnr/gists{/gist_id}","starred_url":"https://api.github.com/users/etiennnr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/etiennnr/subscriptions","organizations_url":"https://api.github.com/users/etiennnr/orgs","repos_url":"https://api.github.com/users/etiennnr/repos","events_url":"https://api.github.com/users/etiennnr/events{/privacy}","received_events_url":"https://api.github.com/users/etiennnr/received_events","type":"User","site_admin":false},"created_at":"2024-03-20T15:24:15Z","updated_at":"2024-03-20T15:24:15Z","author_association":"NONE","body":"Can confirm this is still a problem for me, using version `1.59.1` though","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2009839192/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2011931389","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-2011931389","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":2011931389,"node_id":"IC_kwDOADYVqs5366L9","user":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"https://avatars.githubusercontent.com/u/44700269?v=4","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"https://github.com/EnricoMi","followers_url":"https://api.github.com/users/EnricoMi/followers","following_url":"https://api.github.com/users/EnricoMi/following{/other_user}","gists_url":"https://api.github.com/users/EnricoMi/gists{/gist_id}","starred_url":"https://api.github.com/users/EnricoMi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EnricoMi/subscriptions","organizations_url":"https://api.github.com/users/EnricoMi/orgs","repos_url":"https://api.github.com/users/EnricoMi/repos","events_url":"https://api.github.com/users/EnricoMi/events{/privacy}","received_events_url":"https://api.github.com/users/EnricoMi/received_events","type":"User","site_admin":false},"created_at":"2024-03-21T10:55:14Z","updated_at":"2024-03-21T10:55:14Z","author_association":"COLLABORATOR","body":"Can you confirm with latest release?","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2011931389/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2012384661","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-2012384661","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":2012384661,"node_id":"IC_kwDOADYVqs538o2V","user":{"login":"etiennnr","id":36542216,"node_id":"MDQ6VXNlcjM2NTQyMjE2","avatar_url":"https://avatars.githubusercontent.com/u/36542216?v=4","gravatar_id":"","url":"https://api.github.com/users/etiennnr","html_url":"https://github.com/etiennnr","followers_url":"https://api.github.com/users/etiennnr/followers","following_url":"https://api.github.com/users/etiennnr/following{/other_user}","gists_url":"https://api.github.com/users/etiennnr/gists{/gist_id}","starred_url":"https://api.github.com/users/etiennnr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/etiennnr/subscriptions","organizations_url":"https://api.github.com/users/etiennnr/orgs","repos_url":"https://api.github.com/users/etiennnr/repos","events_url":"https://api.github.com/users/etiennnr/events{/privacy}","received_events_url":"https://api.github.com/users/etiennnr/received_events","type":"User","site_admin":false},"created_at":"2024-03-21T14:02:22Z","updated_at":"2024-03-21T14:02:22Z","author_association":"NONE","body":"Yes, Just tried with v.2.2.0 and got the same result\r\n\r\nHowever, my \"global\" `per_page` setting is set to 40. I tried setting it back to the default (30), and then it actually started from the last item of the `PaginatedList`! \r\n\r\nSo this actually seem to be somehow related to how the `reversed` algorithm deals with a different from the default `per_page` setting.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2012384661/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]
https
GET
api.github.com
None
/repositories/3544490/issues/1136/comments?per_page=3&page=3
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 14:52:50 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/"96b8b7b7d4b0d49be94be5c2cc20e610609885e3e1f73c2d6458eb7d33286eb0"'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '<https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=2>; rel="prev", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=1>; rel="first"'), ('x-accepted-github-permissions', 'issues=read; pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1711294214'), ('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'), ('X-GitHub-Request-Id', 'D046:1589B:4FB0A89:502315A:66003E42')]
[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2016818677","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-2016818677","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":2016818677,"node_id":"IC_kwDOADYVqs54NjX1","user":{"login":"engn33r","id":6261182,"node_id":"MDQ6VXNlcjYyNjExODI=","avatar_url":"https://avatars.githubusercontent.com/u/6261182?v=4","gravatar_id":"","url":"https://api.github.com/users/engn33r","html_url":"https://github.com/engn33r","followers_url":"https://api.github.com/users/engn33r/followers","following_url":"https://api.github.com/users/engn33r/following{/other_user}","gists_url":"https://api.github.com/users/engn33r/gists{/gist_id}","starred_url":"https://api.github.com/users/engn33r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/engn33r/subscriptions","organizations_url":"https://api.github.com/users/engn33r/orgs","repos_url":"https://api.github.com/users/engn33r/repos","events_url":"https://api.github.com/users/engn33r/events{/privacy}","received_events_url":"https://api.github.com/users/engn33r/received_events","type":"User","site_admin":false},"created_at":"2024-03-24T13:58:57Z","updated_at":"2024-03-24T14:00:06Z","author_association":"NONE","body":"For reference, I did not set `per_page` so I was using the default of 30 when I encountered this issue. But I was testing on only one repo with over 30 issues. It could make sense to test with repos with different numbers of issues to see if that is a factor.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2016818677/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]
https
GET
api.github.com
None
/repos/PyGithub/PyGithub
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 16:03:09 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/"c56d6987e79ad7fa7ea859c898ac3b1e58da00e27fbe97bffe433b5a5cbb515d"'), ('Last-Modified', 'Sun, 24 Mar 2024 11:25:21 GMT'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('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', '4993'), ('X-RateLimit-Reset', '1711299465'), ('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'), ('X-GitHub-Request-Id', 'D998:19EC4F:5957305:59D4EDF:66004EBD')]
{"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":"2024-03-24T11:25:21Z","pushed_at":"2024-03-24T15:14:35Z","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":15796,"stargazers_count":6627,"watchers_count":6627,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1704,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":283,"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":1704,"open_issues":283,"watchers":6627,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"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","site_admin":false},"network_count":1704,"subscribers_count":111}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub/issues/1136
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 16:03:10 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/"2c247e53efccb989fff0f942a0fdeca97bb8705c2124682f3b8c2e790d7b8370"'), ('Last-Modified', 'Sun, 24 Mar 2024 14:00:06 GMT'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'issues=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4992'), ('X-RateLimit-Reset', '1711299465'), ('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'), ('X-GitHub-Request-Id', 'D99E:7415A:C681C:C78A4:66004EBE')]
{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/events","html_url":"https://github.com/PyGithub/PyGithub/issues/1136","id":454822411,"node_id":"MDU6SXNzdWU0NTQ4MjI0MTE=","number":1136,"title":"Paginated list reversed only gives the first page of results backwards","user":{"login":"micahsteinberg","id":31256235,"node_id":"MDQ6VXNlcjMxMjU2MjM1","avatar_url":"https://avatars.githubusercontent.com/u/31256235?v=4","gravatar_id":"","url":"https://api.github.com/users/micahsteinberg","html_url":"https://github.com/micahsteinberg","followers_url":"https://api.github.com/users/micahsteinberg/followers","following_url":"https://api.github.com/users/micahsteinberg/following{/other_user}","gists_url":"https://api.github.com/users/micahsteinberg/gists{/gist_id}","starred_url":"https://api.github.com/users/micahsteinberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/micahsteinberg/subscriptions","organizations_url":"https://api.github.com/users/micahsteinberg/orgs","repos_url":"https://api.github.com/users/micahsteinberg/repos","events_url":"https://api.github.com/users/micahsteinberg/events{/privacy}","received_events_url":"https://api.github.com/users/micahsteinberg/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":7,"created_at":"2019-06-11T17:47:23Z","updated_at":"2024-03-24T14:00:06Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"When I do\r\n```\r\ng = Github(\"xxx\")\r\nrepo = g.get_repo(\"xxx\")\r\n\r\nfor comm in repo.get_commits(since=datetime).reversed:\r\n ....\r\n```\r\nit only goes through the most recent 30 results in reverse order.\r\n\r\nI was able to fix this with\r\n```\r\ndef reverse_github_results(paginated_list):\r\n for i in range(paginated_list.totalCount//30, -1, -1):\r\n page = paginated_list.get_page(i)\r\n page.reverse()\r\n for item in page:\r\n yield item\r\n```\r\nbut this possibly runs a bit slower and I thought I should let you guys know\r\n","closed_by":{"login":"stale[bot]","id":26384082,"node_id":"MDM6Qm90MjYzODQwODI=","avatar_url":"https://avatars.githubusercontent.com/in/1724?v=4","gravatar_id":"","url":"https://api.github.com/users/stale%5Bbot%5D","html_url":"https://github.com/apps/stale","followers_url":"https://api.github.com/users/stale%5Bbot%5D/followers","following_url":"https://api.github.com/users/stale%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/stale%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/stale%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stale%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/stale%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/stale%5Bbot%5D/repos","events_url":"https://api.github.com/users/stale%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/stale%5Bbot%5D/received_events","type":"Bot","site_admin":false},"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/reactions","total_count":7,"+1":7,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136/timeline","performed_via_github_app":null,"state_reason":"reopened"}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub/issues/1136/comments?per_page=3
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 16:03:10 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/"57c5d41745d1850a5668491fc82543958ec801d97e5eeb55f7f8da49da691fce"'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '<https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=2>; rel="next", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=3>; rel="last"'), ('x-accepted-github-permissions', 'issues=read; pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1711299465'), ('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', 'D9A4:1F911C:EB7E3:ECB7A:66004EBE')]
[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/520169504","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-520169504","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":520169504,"node_id":"MDEyOklzc3VlQ29tbWVudDUyMDE2OTUwNA==","user":{"login":"stale[bot]","id":26384082,"node_id":"MDM6Qm90MjYzODQwODI=","avatar_url":"https://avatars.githubusercontent.com/in/1724?v=4","gravatar_id":"","url":"https://api.github.com/users/stale%5Bbot%5D","html_url":"https://github.com/apps/stale","followers_url":"https://api.github.com/users/stale%5Bbot%5D/followers","following_url":"https://api.github.com/users/stale%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/stale%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/stale%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stale%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/stale%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/stale%5Bbot%5D/repos","events_url":"https://api.github.com/users/stale%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/stale%5Bbot%5D/received_events","type":"Bot","site_admin":false},"created_at":"2019-08-10T18:16:46Z","updated_at":"2019-08-10T18:16:46Z","author_association":"NONE","body":"This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/520169504/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879739410","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-1879739410","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":1879739410,"node_id":"IC_kwDOADYVqs5wCowS","user":{"login":"engn33r","id":6261182,"node_id":"MDQ6VXNlcjYyNjExODI=","avatar_url":"https://avatars.githubusercontent.com/u/6261182?v=4","gravatar_id":"","url":"https://api.github.com/users/engn33r","html_url":"https://github.com/engn33r","followers_url":"https://api.github.com/users/engn33r/followers","following_url":"https://api.github.com/users/engn33r/following{/other_user}","gists_url":"https://api.github.com/users/engn33r/gists{/gist_id}","starred_url":"https://api.github.com/users/engn33r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/engn33r/subscriptions","organizations_url":"https://api.github.com/users/engn33r/orgs","repos_url":"https://api.github.com/users/engn33r/repos","events_url":"https://api.github.com/users/engn33r/events{/privacy}","received_events_url":"https://api.github.com/users/engn33r/received_events","type":"User","site_admin":false},"created_at":"2024-01-06T16:04:34Z","updated_at":"2024-01-06T16:04:34Z","author_association":"NONE","body":"This was still an issue with v2.1.1 but the fix above worked for me :+1:\r\n\r\nIt would be great if this could be fixed in the library itself, with an example showing reversed usage in the docs.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879739410/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879763065","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-1879763065","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":1879763065,"node_id":"IC_kwDOADYVqs5wCuh5","user":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"https://avatars.githubusercontent.com/u/44700269?v=4","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"https://github.com/EnricoMi","followers_url":"https://api.github.com/users/EnricoMi/followers","following_url":"https://api.github.com/users/EnricoMi/following{/other_user}","gists_url":"https://api.github.com/users/EnricoMi/gists{/gist_id}","starred_url":"https://api.github.com/users/EnricoMi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EnricoMi/subscriptions","organizations_url":"https://api.github.com/users/EnricoMi/orgs","repos_url":"https://api.github.com/users/EnricoMi/repos","events_url":"https://api.github.com/users/EnricoMi/events{/privacy}","received_events_url":"https://api.github.com/users/EnricoMi/received_events","type":"User","site_admin":false},"created_at":"2024-01-06T17:34:11Z","updated_at":"2024-01-06T17:36:10Z","author_association":"COLLABORATOR","body":"I'd be surprised this does not work, there are some unit tests that cover this. Maybe test data have to be recorded again. Reopening, contribution welcome.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879763065/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]
https
GET
api.github.com
None
/repositories/3544490/issues/1136/comments?per_page=3&page=3
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 16:03:11 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/"96b8b7b7d4b0d49be94be5c2cc20e610609885e3e1f73c2d6458eb7d33286eb0"'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '<https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=2>; rel="prev", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=1>; rel="first"'), ('x-accepted-github-permissions', 'issues=read; pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4990'), ('X-RateLimit-Reset', '1711299465'), ('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'), ('X-GitHub-Request-Id', 'D9AA:1F911C:EBB04:ECE9D:66004EBE')]
[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2016818677","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-2016818677","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":2016818677,"node_id":"IC_kwDOADYVqs54NjX1","user":{"login":"engn33r","id":6261182,"node_id":"MDQ6VXNlcjYyNjExODI=","avatar_url":"https://avatars.githubusercontent.com/u/6261182?v=4","gravatar_id":"","url":"https://api.github.com/users/engn33r","html_url":"https://github.com/engn33r","followers_url":"https://api.github.com/users/engn33r/followers","following_url":"https://api.github.com/users/engn33r/following{/other_user}","gists_url":"https://api.github.com/users/engn33r/gists{/gist_id}","starred_url":"https://api.github.com/users/engn33r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/engn33r/subscriptions","organizations_url":"https://api.github.com/users/engn33r/orgs","repos_url":"https://api.github.com/users/engn33r/repos","events_url":"https://api.github.com/users/engn33r/events{/privacy}","received_events_url":"https://api.github.com/users/engn33r/received_events","type":"User","site_admin":false},"created_at":"2024-03-24T13:58:57Z","updated_at":"2024-03-24T14:00:06Z","author_association":"NONE","body":"For reference, I did not set `per_page` so I was using the default of 30 when I encountered this issue. But I was testing on only one repo with over 30 issues. It could make sense to test with repos with different numbers of issues to see if that is a factor.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2016818677/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]
https
GET
api.github.com
None
/repositories/3544490/issues/1136/comments?per_page=3&page=2
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 16:03:11 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/"2da0c87bcdd4e81333c2bcff3919dd02c1f530d83d1f8b34300ce6bd4fcaea47"'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '<https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=1>; rel="prev", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=3>; rel="next", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=3>; rel="last", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=1>; rel="first"'), ('x-accepted-github-permissions', 'issues=read; pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4989'), ('X-RateLimit-Reset', '1711299465'), ('X-RateLimit-Used', '11'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'D9B0:1444A0:581646C:5894CA8:66004EBF')]
[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2009839192","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-2009839192","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":2009839192,"node_id":"IC_kwDOADYVqs53y7ZY","user":{"login":"etiennnr","id":36542216,"node_id":"MDQ6VXNlcjM2NTQyMjE2","avatar_url":"https://avatars.githubusercontent.com/u/36542216?v=4","gravatar_id":"","url":"https://api.github.com/users/etiennnr","html_url":"https://github.com/etiennnr","followers_url":"https://api.github.com/users/etiennnr/followers","following_url":"https://api.github.com/users/etiennnr/following{/other_user}","gists_url":"https://api.github.com/users/etiennnr/gists{/gist_id}","starred_url":"https://api.github.com/users/etiennnr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/etiennnr/subscriptions","organizations_url":"https://api.github.com/users/etiennnr/orgs","repos_url":"https://api.github.com/users/etiennnr/repos","events_url":"https://api.github.com/users/etiennnr/events{/privacy}","received_events_url":"https://api.github.com/users/etiennnr/received_events","type":"User","site_admin":false},"created_at":"2024-03-20T15:24:15Z","updated_at":"2024-03-20T15:24:15Z","author_association":"NONE","body":"Can confirm this is still a problem for me, using version `1.59.1` though","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2009839192/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2011931389","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-2011931389","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":2011931389,"node_id":"IC_kwDOADYVqs5366L9","user":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"https://avatars.githubusercontent.com/u/44700269?v=4","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"https://github.com/EnricoMi","followers_url":"https://api.github.com/users/EnricoMi/followers","following_url":"https://api.github.com/users/EnricoMi/following{/other_user}","gists_url":"https://api.github.com/users/EnricoMi/gists{/gist_id}","starred_url":"https://api.github.com/users/EnricoMi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EnricoMi/subscriptions","organizations_url":"https://api.github.com/users/EnricoMi/orgs","repos_url":"https://api.github.com/users/EnricoMi/repos","events_url":"https://api.github.com/users/EnricoMi/events{/privacy}","received_events_url":"https://api.github.com/users/EnricoMi/received_events","type":"User","site_admin":false},"created_at":"2024-03-21T10:55:14Z","updated_at":"2024-03-21T10:55:14Z","author_association":"COLLABORATOR","body":"Can you confirm with latest release?","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2011931389/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2012384661","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-2012384661","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":2012384661,"node_id":"IC_kwDOADYVqs538o2V","user":{"login":"etiennnr","id":36542216,"node_id":"MDQ6VXNlcjM2NTQyMjE2","avatar_url":"https://avatars.githubusercontent.com/u/36542216?v=4","gravatar_id":"","url":"https://api.github.com/users/etiennnr","html_url":"https://github.com/etiennnr","followers_url":"https://api.github.com/users/etiennnr/followers","following_url":"https://api.github.com/users/etiennnr/following{/other_user}","gists_url":"https://api.github.com/users/etiennnr/gists{/gist_id}","starred_url":"https://api.github.com/users/etiennnr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/etiennnr/subscriptions","organizations_url":"https://api.github.com/users/etiennnr/orgs","repos_url":"https://api.github.com/users/etiennnr/repos","events_url":"https://api.github.com/users/etiennnr/events{/privacy}","received_events_url":"https://api.github.com/users/etiennnr/received_events","type":"User","site_admin":false},"created_at":"2024-03-21T14:02:22Z","updated_at":"2024-03-21T14:02:22Z","author_association":"NONE","body":"Yes, Just tried with v.2.2.0 and got the same result\r\n\r\nHowever, my \"global\" `per_page` setting is set to 40. I tried setting it back to the default (30), and then it actually started from the last item of the `PaginatedList`! \r\n\r\nSo this actually seem to be somehow related to how the `reversed` algorithm deals with a different from the default `per_page` setting.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/2012384661/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]
https
GET
api.github.com
None
/repositories/3544490/issues/1136/comments?per_page=3&page=1
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Server', 'GitHub.com'), ('Date', 'Sun, 24 Mar 2024 16:03:11 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/"57c5d41745d1850a5668491fc82543958ec801d97e5eeb55f7f8da49da691fce"'), ('github-authentication-token-expiration', '2024-04-02 20:01:36 +0200'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '<https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=2>; rel="next", <https://api.github.com/repositories/3544490/issues/1136/comments?per_page=3&page=3>; rel="last"'), ('x-accepted-github-permissions', 'issues=read; pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4988'), ('X-RateLimit-Reset', '1711299465'), ('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'), ('X-GitHub-Request-Id', 'D9BC:7F0BF:891A4:89D38:66004EBF')]
[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/520169504","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-520169504","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":520169504,"node_id":"MDEyOklzc3VlQ29tbWVudDUyMDE2OTUwNA==","user":{"login":"stale[bot]","id":26384082,"node_id":"MDM6Qm90MjYzODQwODI=","avatar_url":"https://avatars.githubusercontent.com/in/1724?v=4","gravatar_id":"","url":"https://api.github.com/users/stale%5Bbot%5D","html_url":"https://github.com/apps/stale","followers_url":"https://api.github.com/users/stale%5Bbot%5D/followers","following_url":"https://api.github.com/users/stale%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/stale%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/stale%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stale%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/stale%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/stale%5Bbot%5D/repos","events_url":"https://api.github.com/users/stale%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/stale%5Bbot%5D/received_events","type":"Bot","site_admin":false},"created_at":"2019-08-10T18:16:46Z","updated_at":"2019-08-10T18:16:46Z","author_association":"NONE","body":"This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.\n","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/520169504/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879739410","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-1879739410","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":1879739410,"node_id":"IC_kwDOADYVqs5wCowS","user":{"login":"engn33r","id":6261182,"node_id":"MDQ6VXNlcjYyNjExODI=","avatar_url":"https://avatars.githubusercontent.com/u/6261182?v=4","gravatar_id":"","url":"https://api.github.com/users/engn33r","html_url":"https://github.com/engn33r","followers_url":"https://api.github.com/users/engn33r/followers","following_url":"https://api.github.com/users/engn33r/following{/other_user}","gists_url":"https://api.github.com/users/engn33r/gists{/gist_id}","starred_url":"https://api.github.com/users/engn33r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/engn33r/subscriptions","organizations_url":"https://api.github.com/users/engn33r/orgs","repos_url":"https://api.github.com/users/engn33r/repos","events_url":"https://api.github.com/users/engn33r/events{/privacy}","received_events_url":"https://api.github.com/users/engn33r/received_events","type":"User","site_admin":false},"created_at":"2024-01-06T16:04:34Z","updated_at":"2024-01-06T16:04:34Z","author_association":"NONE","body":"This was still an issue with v2.1.1 but the fix above worked for me :+1:\r\n\r\nIt would be great if this could be fixed in the library itself, with an example showing reversed usage in the docs.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879739410/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879763065","html_url":"https://github.com/PyGithub/PyGithub/issues/1136#issuecomment-1879763065","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/1136","id":1879763065,"node_id":"IC_kwDOADYVqs5wCuh5","user":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"https://avatars.githubusercontent.com/u/44700269?v=4","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"https://github.com/EnricoMi","followers_url":"https://api.github.com/users/EnricoMi/followers","following_url":"https://api.github.com/users/EnricoMi/following{/other_user}","gists_url":"https://api.github.com/users/EnricoMi/gists{/gist_id}","starred_url":"https://api.github.com/users/EnricoMi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EnricoMi/subscriptions","organizations_url":"https://api.github.com/users/EnricoMi/orgs","repos_url":"https://api.github.com/users/EnricoMi/repos","events_url":"https://api.github.com/users/EnricoMi/events{/privacy}","received_events_url":"https://api.github.com/users/EnricoMi/received_events","type":"User","site_admin":false},"created_at":"2024-01-06T17:34:11Z","updated_at":"2024-01-06T17:36:10Z","author_association":"COLLABORATOR","body":"I'd be surprised this does not work, there are some unit tests that cover this. Maybe test data have to be recorded again. Reopening, contribution welcome.","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/1879763065/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]
https
GET
api.github.com
None
/repos/PyGithub/PyGithub
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Date', 'Tue, 17 Sep 2024 19:08:02 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/"673c5f1199083cdc732a68adb10687eef0cddf7b47b98aae062c044d293eeb6e"'), ('Last-Modified', 'Tue, 17 Sep 2024 17:14:19 GMT'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 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', '1726603586'), ('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', '7F17:39A73C:90E1A8:9263C0:66E9D392')]
{"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":"2024-09-17T17:14:19Z","pushed_at":"2024-09-12T10:47:45Z","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":16092,"stargazers_count":6906,"watchers_count":6906,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1762,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":341,"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":1762,"open_issues":341,"watchers":6906,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","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","site_admin":false},"network_count":1762,"subscribers_count":111}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { id number }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "first": 30}}
200
[('Date', 'Tue, 17 Sep 2024 19:08:03 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '20'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F24:0F74:2C9F50:2D2649:66E9D392')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOS0xM1QxOToyMzowOSswMjowMM4AbYx8","endCursor":"Y3Vyc29yOnYyOpK5MjAyMy0wMy0xNFQwOTozNjoxOSswMTowMM4AQ6mO","hasNextPage":true,"hasPreviousPage":false},"nodes":[{"id":"D_kwDOADYVqs4AbYx8","number":3044},{"id":"D_kwDOADYVqs4AbOZV","number":3033},{"id":"D_kwDOADYVqs4AaHoG","number":2993},{"id":"D_kwDOADYVqs4APEfM","number":2205},{"id":"D_kwDOADYVqs4AYpFV","number":2938},{"id":"D_kwDOADYVqs4AaOPh","number":2997},{"id":"D_kwDOADYVqs4AaEL9","number":2991},{"id":"D_kwDOADYVqs4AY1Qr","number":2953},{"id":"D_kwDOADYVqs4AYqi6","number":2943},{"id":"D_kwDOADYVqs4AYLcF","number":2916},{"id":"D_kwDOADYVqs4AX7h-","number":2909},{"id":"D_kwDOADYVqs4AXfgf","number":2889},{"id":"D_kwDOADYVqs4AWoET","number":2852},{"id":"D_kwDOADYVqs4AWfTk","number":2849},{"id":"D_kwDOADYVqs4AWN90","number":2814},{"id":"D_kwDOADYVqs4AV4CR","number":2795},{"id":"D_kwDOADYVqs4AVemo","number":2758},{"id":"D_kwDOADYVqs4AVJc_","number":2737},{"id":"D_kwDOADYVqs4AU_3J","number":2710},{"id":"D_kwDOADYVqs4ATVaC","number":2495},{"id":"D_kwDOADYVqs4APye2","number":2255},{"id":"D_kwDOADYVqs4AUj0g","number":2619},{"id":"D_kwDOADYVqs4AUSqN","number":2559},{"id":"D_kwDOADYVqs4AOBfB","number":2104},{"id":"D_kwDOADYVqs4AUAze","number":2539},{"id":"D_kwDOADYVqs4AOzRO","number":2177},{"id":"D_kwDOADYVqs4AS7Mv","number":2453},{"id":"D_kwDOADYVqs4ATdq2","number":2500},{"id":"D_kwDOADYVqs4ATJZD","number":2480},{"id":"D_kwDOADYVqs4AQ6mO","number":2321}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { id number }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "first": 30, "after": "Y3Vyc29yOnYyOpK5MjAyMy0wMy0xNFQwOTozNjoxOSswMTowMM4AQ6mO"}}
200
[('Date', 'Tue, 17 Sep 2024 19:08:03 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4979'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '21'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F27:2B9D7D:33AD64:344396:66E9D393')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyMy0wMi0yNlQxMzoyODo1MiswMTowMM4ASrYx","endCursor":"Y3Vyc29yOnYyOpK5MjAyMS0wNS0wMVQwNTozMzoxMCswMjowMM4AMwlT","hasNextPage":true,"hasPreviousPage":true},"nodes":[{"id":"D_kwDOADYVqs4ASrYx","number":2438},{"id":"D_kwDOADYVqs4ARkEV","number":2368},{"id":"D_kwDOADYVqs4ARjip","number":2367},{"id":"D_kwDOADYVqs4AP-zL","number":2264},{"id":"D_kwDOADYVqs4ARbFw","number":2357},{"id":"D_kwDOADYVqs4AQ39o","number":2318},{"id":"D_kwDOADYVqs4AQvCS","number":2306},{"id":"D_kwDOADYVqs4AQsU4","number":2304},{"id":"D_kwDOADYVqs4AQkpa","number":2298},{"id":"D_kwDOADYVqs4AQbma","number":2293},{"id":"D_kwDOADYVqs4AQbDa","number":2292},{"id":"D_kwDOADYVqs4AOdu4","number":2153},{"id":"D_kwDOADYVqs4AQJZe","number":2277},{"id":"D_kwDOADYVqs4ANphT","number":2057},{"id":"D_kwDOADYVqs4APrSb","number":2246},{"id":"D_kwDOADYVqs4APqQq","number":2242},{"id":"D_kwDOADYVqs4AOz7S","number":2179},{"id":"D_kwDOADYVqs4AOw8Q","number":2173},{"id":"D_kwDOADYVqs4AOeON","number":2155},{"id":"D_kwDOADYVqs4AONXM","number":2124},{"id":"MDEwOkRpc2N1c3Npb24zNDkxNjI2","number":2013},{"id":"MDEwOkRpc2N1c3Npb24zNDU2NDg0","number":1993},{"id":"MDEwOkRpc2N1c3Npb24zNTExNTg4","number":2023},{"id":"MDEwOkRpc2N1c3Npb24zNTA0OTQ4","number":2018},{"id":"MDEwOkRpc2N1c3Npb24zNTAwNzI2","number":2015},{"id":"MDEwOkRpc2N1c3Npb24zMjQzMTgx","number":1864},{"id":"MDEwOkRpc2N1c3Npb24zMzg4NzEy","number":1964},{"id":"MDEwOkRpc2N1c3Npb243Mzc4NA==","number":1790},{"id":"MDEwOkRpc2N1c3Npb24zMzU4MDAz","number":1946},{"id":"MDEwOkRpc2N1c3Npb24zMzQ0NzIz","number":1936}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { id number }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "first": 30, "after": "Y3Vyc29yOnYyOpK5MjAyMS0wNS0wMVQwNTozMzoxMCswMjowMM4AMwlT"}}
200
[('Date', 'Tue, 17 Sep 2024 19:08:03 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '22'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F8E:0F74:2CA274:2D2971:66E9D393')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyMS0wMy0xOFQwMzowODowMSswMTowMM4ALjaQ","endCursor":"Y3Vyc29yOnYyOpK5MjAyMC0xMi0wOVQwNjo0NDozMiswMTowMM2_Dw==","hasNextPage":false,"hasPreviousPage":true},"nodes":[{"id":"MDEwOkRpc2N1c3Npb24zMDI4NjI0","number":1848},{"id":"MDEwOkRpc2N1c3Npb24zMjI2MTI4","number":1854},{"id":"MDEwOkRpc2N1c3Npb24xNjY3ODM4","number":1819},{"id":"MDEwOkRpc2N1c3Npb240ODg4Ng==","number":1778},{"id":"MDEwOkRpc2N1c3Npb240ODkxMQ==","number":1780}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { id number }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "last": 30}}
200
[('Date', 'Tue, 17 Sep 2024 19:08:04 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '23'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F22:149128:8C2DDB:8DA7E3:66E9D393')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyMi0wOS0yNlQyMDo1ODoxOSswMjowMM4AQ39o","endCursor":"Y3Vyc29yOnYyOpK5MjAyMC0xMi0wOVQwNjo0NDozMiswMTowMM2_Dw==","hasNextPage":false,"hasPreviousPage":true},"nodes":[{"id":"D_kwDOADYVqs4AQ39o","number":2318},{"id":"D_kwDOADYVqs4AQvCS","number":2306},{"id":"D_kwDOADYVqs4AQsU4","number":2304},{"id":"D_kwDOADYVqs4AQkpa","number":2298},{"id":"D_kwDOADYVqs4AQbma","number":2293},{"id":"D_kwDOADYVqs4AQbDa","number":2292},{"id":"D_kwDOADYVqs4AOdu4","number":2153},{"id":"D_kwDOADYVqs4AQJZe","number":2277},{"id":"D_kwDOADYVqs4ANphT","number":2057},{"id":"D_kwDOADYVqs4APrSb","number":2246},{"id":"D_kwDOADYVqs4APqQq","number":2242},{"id":"D_kwDOADYVqs4AOz7S","number":2179},{"id":"D_kwDOADYVqs4AOw8Q","number":2173},{"id":"D_kwDOADYVqs4AOeON","number":2155},{"id":"D_kwDOADYVqs4AONXM","number":2124},{"id":"MDEwOkRpc2N1c3Npb24zNDkxNjI2","number":2013},{"id":"MDEwOkRpc2N1c3Npb24zNDU2NDg0","number":1993},{"id":"MDEwOkRpc2N1c3Npb24zNTExNTg4","number":2023},{"id":"MDEwOkRpc2N1c3Npb24zNTA0OTQ4","number":2018},{"id":"MDEwOkRpc2N1c3Npb24zNTAwNzI2","number":2015},{"id":"MDEwOkRpc2N1c3Npb24zMjQzMTgx","number":1864},{"id":"MDEwOkRpc2N1c3Npb24zMzg4NzEy","number":1964},{"id":"MDEwOkRpc2N1c3Npb243Mzc4NA==","number":1790},{"id":"MDEwOkRpc2N1c3Npb24zMzU4MDAz","number":1946},{"id":"MDEwOkRpc2N1c3Npb24zMzQ0NzIz","number":1936},{"id":"MDEwOkRpc2N1c3Npb24zMDI4NjI0","number":1848},{"id":"MDEwOkRpc2N1c3Npb24zMjI2MTI4","number":1854},{"id":"MDEwOkRpc2N1c3Npb24xNjY3ODM4","number":1819},{"id":"MDEwOkRpc2N1c3Npb240ODg4Ng==","number":1778},{"id":"MDEwOkRpc2N1c3Npb240ODkxMQ==","number":1780}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { id number }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "last": 30, "before": "Y3Vyc29yOnYyOpK5MjAyMi0wOS0yNlQyMDo1ODoxOSswMjowMM4AQ39o"}}
200
[('Date', 'Tue, 17 Sep 2024 19:08:04 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4976'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '24'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F3A:39A73C:90EC18:926E5B:66E9D394')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wNi0yOFQyMDowODo1MyswMjowMM4AaOPh","endCursor":"Y3Vyc29yOnYyOpK5MjAyMi0xMS0yMlQwODo0Mjo0OCswMTowMM4ARbFw","hasNextPage":true,"hasPreviousPage":true},"nodes":[{"id":"D_kwDOADYVqs4AaOPh","number":2997},{"id":"D_kwDOADYVqs4AaEL9","number":2991},{"id":"D_kwDOADYVqs4AY1Qr","number":2953},{"id":"D_kwDOADYVqs4AYqi6","number":2943},{"id":"D_kwDOADYVqs4AYLcF","number":2916},{"id":"D_kwDOADYVqs4AX7h-","number":2909},{"id":"D_kwDOADYVqs4AXfgf","number":2889},{"id":"D_kwDOADYVqs4AWoET","number":2852},{"id":"D_kwDOADYVqs4AWfTk","number":2849},{"id":"D_kwDOADYVqs4AWN90","number":2814},{"id":"D_kwDOADYVqs4AV4CR","number":2795},{"id":"D_kwDOADYVqs4AVemo","number":2758},{"id":"D_kwDOADYVqs4AVJc_","number":2737},{"id":"D_kwDOADYVqs4AU_3J","number":2710},{"id":"D_kwDOADYVqs4ATVaC","number":2495},{"id":"D_kwDOADYVqs4APye2","number":2255},{"id":"D_kwDOADYVqs4AUj0g","number":2619},{"id":"D_kwDOADYVqs4AUSqN","number":2559},{"id":"D_kwDOADYVqs4AOBfB","number":2104},{"id":"D_kwDOADYVqs4AUAze","number":2539},{"id":"D_kwDOADYVqs4AOzRO","number":2177},{"id":"D_kwDOADYVqs4AS7Mv","number":2453},{"id":"D_kwDOADYVqs4ATdq2","number":2500},{"id":"D_kwDOADYVqs4ATJZD","number":2480},{"id":"D_kwDOADYVqs4AQ6mO","number":2321},{"id":"D_kwDOADYVqs4ASrYx","number":2438},{"id":"D_kwDOADYVqs4ARkEV","number":2368},{"id":"D_kwDOADYVqs4ARjip","number":2367},{"id":"D_kwDOADYVqs4AP-zL","number":2264},{"id":"D_kwDOADYVqs4ARbFw","number":2357}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { id number }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "last": 30, "before": "Y3Vyc29yOnYyOpK5MjAyNC0wNi0yOFQyMDowODo1MyswMjowMM4AaOPh"}}
200
[('Date', 'Tue, 17 Sep 2024 19:08:05 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4975'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '25'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FB8:381690:9439A6:95B6AF:66E9D394')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOS0xM1QxOToyMzowOSswMjowMM4AbYx8","endCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOC0yOFQxNzozMjoxMiswMjowMM4AYpFV","hasNextPage":true,"hasPreviousPage":false},"nodes":[{"id":"D_kwDOADYVqs4AbYx8","number":3044},{"id":"D_kwDOADYVqs4AbOZV","number":3033},{"id":"D_kwDOADYVqs4AaHoG","number":2993},{"id":"D_kwDOADYVqs4APEfM","number":2205},{"id":"D_kwDOADYVqs4AYpFV","number":2938}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { id number }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "first": 1, "after": null}}
200
[('Date', 'Tue, 17 Sep 2024 19:08:05 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4974'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '26'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FDE:34173C:353005:35C67F:66E9D395')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOS0xM1QxOToyMzowOSswMjowMM4AbYx8","endCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOS0xM1QxOToyMzowOSswMjowMM4AbYx8","hasNextPage":true,"hasPreviousPage":false},"nodes":[{"id":"D_kwDOADYVqs4AbYx8","number":3044}]}}}}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Date', 'Wed, 06 Nov 2024 16:42:38 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/"3afadc6634ff667ccc0f7a4bac9e11272b6f61d3b092261e62c29520417f367e"'), ('Last-Modified', 'Wed, 06 Nov 2024 10:56:11 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', '4997'), ('X-RateLimit-Reset', '1730914958'), ('X-RateLimit-Used', '3'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'CA6A:1F06D9:152550C:155A549:672B9C7E')]
{"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":"2024-11-06T10:56:11Z","pushed_at":"2024-11-04T10:08:04Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":16283,"stargazers_count":7020,"watchers_count":7020,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1786,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":351,"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":1786,"open_issues":351,"watchers":7020,"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":1786,"subscribers_count":111}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $number: Int!) {\n repository(name: $repo, owner: $owner) {\n discussion(number: $number) { author { login } number title }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "number": 2205}}
200
[('Date', 'Wed, 06 Nov 2024 16:42:39 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('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.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4999'), ('X-RateLimit-Reset', '1730914959'), ('X-RateLimit-Used', '1'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'CAAD:3C869D:15224B9:1557596:672B9C7F')]
{"data":{"repository":{"discussion":{"author":{"login":"EnricoMi"},"number":2205,"title":"Is the PyGithub project dead? How can the community help?"}}}}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Date', 'Tue, 17 Sep 2024 13:54:13 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/"c8e45d1a983f482b7c91fe66326bb90a746e7a7d4592af657e9f4076fc3c4466"'), ('Last-Modified', 'Tue, 17 Sep 2024 06:27:32 GMT'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1726582607'), ('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', '7FBA:1BAA22:E03E49:E21E67:66E98A05')]
{"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":"2024-09-17T06:27:32Z","pushed_at":"2024-09-12T10:47:45Z","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":16092,"stargazers_count":6905,"watchers_count":6905,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1762,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":341,"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":1762,"open_issues":341,"watchers":6905,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","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","site_admin":false},"network_count":1762,"subscribers_count":111}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n author { login }\n number\n repository {\n owner { login }\n name\n }\n title\n }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "first": 30}}
200
[('Date', 'Tue, 17 Sep 2024 13:54:14 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4987'), ('X-RateLimit-Reset', '1726582607'), ('X-RateLimit-Used', '13'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F75:221185:D4482D:D6286C:66E98A05')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOS0xM1QxOToyMzowOSswMjowMM4AbYx8","endCursor":"Y3Vyc29yOnYyOpK5MjAyMy0wMy0xNFQwOTozNjoxOSswMTowMM4AQ6mO","hasNextPage":true,"hasPreviousPage":false},"nodes":[{"author":{"login":"gmishkin"},"number":3044,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Automaticlly look for access tokens in standard places"},{"author":{"login":"kostrykin"},"number":3033,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Possible to interact with the Discussions on a GitHub repository?"},{"author":{"login":"heitorPB"},"number":2993,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to get a list of custom repository properties?"},{"author":{"login":"EnricoMi"},"number":2205,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Is the PyGithub project dead? How can the community help?"},{"author":{"login":"guymatz"},"number":2938,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How can I tell if my branch has a Pull Request?"},{"author":{"login":"bobneuman"},"number":2997,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Response caching"},{"author":{"login":"syang"},"number":2991,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Recursively list all file names in a repo without being throttled"},{"author":{"login":"lmilbaum"},"number":2953,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Can this project used for creation a GitHub app?"},{"author":{"login":"zituo-jin"},"number":2943,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Operations on pull requests in merge queue"},{"author":{"login":"pn17F2DD3"},"number":2916,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Count the number of 'reopened' issues in GitHub"},{"author":{"login":"bliu11"},"number":2909,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"long backoff time when encountering a single 403"},{"author":{"login":"andrewakl"},"number":2889,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to set the \"prevent_self_review\" param when creating/updating GitHub environment?"},{"author":{"login":"whanso"},"number":2852,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Batch multiple `create_file` invocations within single commit?"},{"author":{"login":"baishuotong"},"number":2849,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"A research for generating PR checklists in Pull Request Template"},{"author":{"login":"marksie1988"},"number":2814,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"get_secret not raising an exception"},{"author":{"login":"fsadykov"},"number":2795,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to get github issue python class using url or id?"},{"author":{"login":"vsajip"},"number":2758,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How do you sync a fork with its parent?"},{"author":{"login":"lokeshwarobuli"},"number":2737,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to log requests"},{"author":{"login":"aditya-samalla"},"number":2710,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to sign a commit raised via PyGithub"},{"author":{"login":"zsbeheshti"},"number":2495,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Definition of the initial population for the genetic algorithm by the user"},{"author":{"login":"buhtz"},"number":2255,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to securily use access tokens?"},{"author":null,"number":2619,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How do I create a new branch with PyGithub?"},{"author":{"login":"antoineKorbit"},"number":2559,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Release of new version for this library"},{"author":{"login":"dougdonohoe"},"number":2104,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How do I call /installation/repositories API?"},{"author":{"login":"parteekcoder"},"number":2539,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Pull request accross different repository"},{"author":{"login":"jackfurr"},"number":2177,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to Revert a Merged PR"},{"author":{"login":"EnricoMi"},"number":2453,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Maintainers TODO list"},{"author":{"login":"c4mmartin"},"number":2500,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Trying to fire off workflow_dispatch events"},{"author":{"login":"arunanandhan"},"number":2480,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Is there a way to search if a string present in default branch?"},{"author":{"login":"EnricoMi"},"number":2321,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Prioritising pull requests"}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n author { login }\n number\n repository {\n owner { login }\n name\n }\n title\n }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "first": 30, "after": "Y3Vyc29yOnYyOpK5MjAyMy0wMy0xNFQwOTozNjoxOSswMTowMM4AQ6mO"}}
200
[('Date', 'Tue, 17 Sep 2024 13:54:14 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4986'), ('X-RateLimit-Reset', '1726582607'), ('X-RateLimit-Used', '14'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F1E:39E39C:D73E82:D91A96:66E98A06')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyMy0wMi0yNlQxMzoyODo1MiswMTowMM4ASrYx","endCursor":"Y3Vyc29yOnYyOpK5MjAyMS0wNS0wMVQwNTozMzoxMCswMjowMM4AMwlT","hasNextPage":true,"hasPreviousPage":true},"nodes":[{"author":{"login":"Vuizur"},"number":2438,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Uploading multiple assets to a release"},{"author":{"login":"songyuc"},"number":2368,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Can I download a specifical file from my repo?"},{"author":{"login":"gitblanc"},"number":2367,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"ImportError: cannot import name 'Github' from 'github' (/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/github/__init__.py)"},{"author":{"login":"mmdbalkhi"},"number":2264,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2396)"},{"author":{"login":"mariolasagna007"},"number":2357,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"repo.get_codescan_alerts()"},{"author":{"login":"xii-yang"},"number":2318,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to search the Pull Request which first introduce a commit Sha"},{"author":{"login":"xenosdio"},"number":2306,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Verify if login_or_token is correct"},{"author":{"login":"DelaporteRobin"},"number":2304,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Upload files on github"},{"author":{"login":"mosheco"},"number":2298,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Question: where is GithubIntegration documented ."},{"author":{"login":"ygoldsmith"},"number":2293,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to query check suite results"},{"author":{"login":"nri-xiang-liu-01"},"number":2292,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How can I create a new branch by use PyGithub?"},{"author":{"login":"yoyomeng2"},"number":2153,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Is there support to set bypass PR requirements users?"},{"author":{"login":"kenorb"},"number":2277,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Download an artifact's file from GitHub Actions (Workflows)"},{"author":{"login":"LuisSFGH"},"number":2057,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Do you have plans to add workflows features?"},{"author":{"login":"sayakpaul"},"number":2246,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Question on hostname"},{"author":{"login":"sr-murthy"},"number":2242,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Top repo contributors"},{"author":{"login":"kamaraj-muthupandian"},"number":2179,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Connect GHE cloud using OIDC"},{"author":{"login":"xmo-odoo"},"number":2173,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Dedicated builder object for review comments?"},{"author":{"login":"yoyomeng2"},"number":2155,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"GithubCredentials 401"},{"author":{"login":"padmashree12"},"number":2124,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Star"},{"author":{"login":"simkimsia"},"number":2013,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to run tests for just 1 test case?"},{"author":{"login":"scoates"},"number":1993,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Drop .pyi?"},{"author":{"login":"yoyomeng2"},"number":2023,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Looking for githubstatus Object?"},{"author":{"login":"evilensky"},"number":2018,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"audit-log"},{"author":{"login":"orenzp"},"number":2015,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"PyGithub support for Team"},{"author":{"login":"Nuzair46"},"number":1864,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"get_contributers"},{"author":{"login":"Captain8771"},"number":1964,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"ModuleNotFoundError: No module named 'github' but i pip installed pygithub?"},{"author":{"login":"ssbarnea"},"number":1790,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to batch enable auto-merges on multiple repositories?"},{"author":{"login":"astrochun"},"number":1946,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Exporting JSON about repositories"},{"author":{"login":"bhushanladdad"},"number":1936,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"get_contents thorws error UnknownObjectException"}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n author { login }\n number\n repository {\n owner { login }\n name\n }\n title\n }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": null, "first": 30, "after": "Y3Vyc29yOnYyOpK5MjAyMS0wNS0wMVQwNTozMzoxMCswMjowMM4AMwlT"}}
200
[('Date', 'Tue, 17 Sep 2024 13:54:15 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4985'), ('X-RateLimit-Reset', '1726582607'), ('X-RateLimit-Used', '15'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FB0:3299B4:DC961E:DE761B:66E98A06')]
{"data":{"repository":{"discussions":{"totalCount":65,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyMS0wMy0xOFQwMzowODowMSswMTowMM4ALjaQ","endCursor":"Y3Vyc29yOnYyOpK5MjAyMC0xMi0wOVQwNjo0NDozMiswMTowMM2_Dw==","hasNextPage":false,"hasPreviousPage":true},"nodes":[{"author":{"login":"dejokz"},"number":1848,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to get number of open and closed issue of a repo"},{"author":{"login":"MarkWilsonODS"},"number":1854,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Repo visibility"},{"author":{"login":"kenorb"},"number":1819,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to access logs_url's contents?"},{"author":{"login":"henryiii"},"number":1778,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Dump Issue to structured format"},{"author":{"login":"henryiii"},"number":1780,"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"Show an example of a more advanced query"}]}}}}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Date', 'Tue, 17 Sep 2024 13:41: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/"c8e45d1a983f482b7c91fe66326bb90a746e7a7d4592af657e9f4076fc3c4466"'), ('Last-Modified', 'Tue, 17 Sep 2024 06:27:32 GMT'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 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', '1726582607'), ('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', '7FFB:93EBB:C1EEA3:C3A90C:66E98700')]
{"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":"2024-09-17T06:27:32Z","pushed_at":"2024-09-12T10:47:45Z","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":16092,"stargazers_count":6905,"watchers_count":6905,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1762,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":341,"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":1762,"open_issues":341,"watchers":6905,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","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","site_admin":false},"network_count":1762,"subscribers_count":111}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { number title }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": true, "category_id": null, "states": null, "first": 30}}
200
[('Date', 'Tue, 17 Sep 2024 13:41:21 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1726582607'), ('X-RateLimit-Used', '2'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FBC:3299B4:CDA584:CF6517:66E98700')]
{"data":{"repository":{"discussions":{"totalCount":10,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOC0yOVQxODowMTowMCswMjowMM4AaHoG","endCursor":"Y3Vyc29yOnYyOpK5MjAyMC0xMi0wOVQxNTo1Njo1MSswMTowMM2-9g==","hasNextPage":false,"hasPreviousPage":false},"nodes":[{"number":2993,"title":"How to get a list of custom repository properties?"},{"number":2619,"title":"How do I create a new branch with PyGithub?"},{"number":2104,"title":"How do I call /installation/repositories API?"},{"number":2500,"title":"Trying to fire off workflow_dispatch events"},{"number":2292,"title":"How can I create a new branch by use PyGithub?"},{"number":2153,"title":"Is there support to set bypass PR requirements users?"},{"number":2277,"title":"Download an artifact's file from GitHub Actions (Workflows)"},{"number":2023,"title":"Looking for githubstatus Object?"},{"number":1964,"title":"ModuleNotFoundError: No module named 'github' but i pip installed pygithub?"},{"number":1778,"title":"Dump Issue to structured format"}]}}}}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Date', 'Tue, 17 Sep 2024 13:52: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/"c8e45d1a983f482b7c91fe66326bb90a746e7a7d4592af657e9f4076fc3c4466"'), ('Last-Modified', 'Tue, 17 Sep 2024 06:27:32 GMT'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1726582607'), ('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', '7F55:1BAA22:DE780E:E05464:66E989AD')]
{"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":"2024-09-17T06:27:32Z","pushed_at":"2024-09-12T10:47:45Z","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":16092,"stargazers_count":6905,"watchers_count":6905,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1762,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":341,"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":1762,"open_issues":341,"watchers":6905,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","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","site_admin":false},"network_count":1762,"subscribers_count":111}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { number title }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": "MDE4OkRpc2N1c3Npb25DYXRlZ29yeTMyMDI5MDYy", "states": null, "first": 30}}
200
[('Date', 'Tue, 17 Sep 2024 13:52:46 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4988'), ('X-RateLimit-Reset', '1726582607'), ('X-RateLimit-Used', '12'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F12:39E39C:D5995D:D7719E:66E989AD')]
{"data":{"repository":{"discussions":{"totalCount":7,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOS0xM1QxOToyMzowOSswMjowMM4AbYx8","endCursor":"Y3Vyc29yOnYyOpK5MjAyMC0xMi0wOVQwNjo0NDozMiswMTowMM2_Dw==","hasNextPage":false,"hasPreviousPage":false},"nodes":[{"number":3044,"title":"Automaticlly look for access tokens in standard places"},{"number":2997,"title":"Response caching"},{"number":2057,"title":"Do you have plans to add workflows features?"},{"number":2242,"title":"Top repo contributors"},{"number":2173,"title":"Dedicated builder object for review comments?"},{"number":1993,"title":"Drop .pyi?"},{"number":1780,"title":"Show an example of a more advanced query"}]}}},"extensions":{"warnings":[{"type":"DEPRECATION","message":"The id MDE4OkRpc2N1c3Npb25DYXRlZ29yeTMyMDI5MDYy is deprecated. Update your cache to use the next_global_id from the data payload.","data":{"legacy_global_id":"MDE4OkRpc2N1c3Npb25DYXRlZ29yeTMyMDI5MDYy","next_global_id":"DIC_kwDOADYVqs4B6LmG"},"link":"https://docs.github.com"}]}}
https
GET
api.github.com
None
/repos/PyGithub/PyGithub
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}
None
200
[('Date', 'Tue, 17 Sep 2024 13:49:29 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/"c8e45d1a983f482b7c91fe66326bb90a746e7a7d4592af657e9f4076fc3c4466"'), ('Last-Modified', 'Tue, 17 Sep 2024 06:27:32 GMT'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4987'), ('X-RateLimit-Reset', '1726582607'), ('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', '7F0A:8BC4A:D5EE80:D7C1D7:66E988E9')]
{"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":"2024-09-17T06:27:32Z","pushed_at":"2024-09-12T10:47:45Z","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":16092,"stargazers_count":6905,"watchers_count":6905,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1762,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":341,"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":1762,"open_issues":341,"watchers":6905,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","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","site_admin":false},"network_count":1762,"subscribers_count":111}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($repo: String!, $owner: String!, $answered: Boolean, $category_id: ID, $states: [DiscussionState!], $first: Int, $last: Int, $before: String, $after: String) {\n repository(name: $repo, owner: $owner) {\n discussions(answered: $answered, categoryId: $category_id, states: $states, first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { number title }\n }\n }\n }\n ", "variables": {"repo": "PyGithub", "owner": "PyGithub", "answered": null, "category_id": null, "states": ["CLOSED"], "first": 30}}
200
[('Date', 'Tue, 17 Sep 2024 13:49:29 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1726582607'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FF2:2E65B1:C92755:CAF635:66E988E9')]
{"data":{"repository":{"discussions":{"totalCount":6,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOC0yOFQxNzozMjoxMiswMjowMM4AYpFV","endCursor":"Y3Vyc29yOnYyOpK5MjAyMy0wMy0zMFQxODoxODo0OSswMjowMM4ATJZD","hasNextPage":false,"hasPreviousPage":false},"nodes":[{"number":2938,"title":"How can I tell if my branch has a Pull Request?"},{"number":2495,"title":"Definition of the initial population for the genetic algorithm by the user"},{"number":2559,"title":"Release of new version for this library"},{"number":2104,"title":"How do I call /installation/repositories API?"},{"number":2539,"title":"Pull request accross different repository"},{"number":2480,"title":"Is there a way to search if a string present in default branch?"}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on Discussion {\n answer {\n author { login }\n body\n bodyHTML\n bodyText\n createdAt\n databaseId\n discussion { id }\n editor { login }\n id\n lastEditedAt\n updatedAt\n url\n }\n author { login }\n body\n bodyHTML\n bodyText\n category {\n createdAt\n description\n emoji\n emojiHTML\n id\n isAnswerable\n name\n repository { owner { login } name }\n slug\n updatedAt\n }\n comments(first: 10) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n id\n }\n }\n createdAt\n databaseId\n editor { login }\n id\n labels(first: 10) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n id\n name\n }\n }\n lastEditedAt\n number\n reactions(first: 10) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n id\n }\n }\n repository {\n owner { login }\n name\n }\n title\n updatedAt\n url\n }\n }\n }\n ", "variables": {"id": "D_kwDOADYVqs4AaHoG"}}
200
[('Date', 'Tue, 17 Sep 2024 19:10:18 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4973'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '27'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F67:2B9D7D:35ACF2:3648DD:66E9D41A')]
{"data":{"node":{"__typename":"Discussion","answer":{"author":{"login":"dawngerpony"},"body":"[This comment](https://github.com/PyGithub/PyGithub/issues/2895#issue-2118964108) contains the answer to your question:\r\n\r\n```python\r\nmy_repo.raw_data[\"custom_properties\"]\r\n```\r\n\r\n#2968 appears to add proper support for custom properties, but doesn't look like it's made it into a release yet.","bodyHTML":"<p dir=\"auto\"><a href=\"https://github.com/PyGithub/PyGithub/issues/2895#issue-2118964108\" data-hovercard-type=\"issue\" data-hovercard-url=\"/PyGithub/PyGithub/issues/2895/hovercard\">This comment</a> contains the answer to your question:</p>\n<div class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"my_repo.raw_data[&quot;custom_properties&quot;]\"><pre class=\"notranslate\"><span class=\"pl-s1\">my_repo</span>.<span class=\"pl-s1\">raw_data</span>[<span class=\"pl-s\">\"custom_properties\"</span>]</pre></div>\n<p dir=\"auto\"><a class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"2293897055\" data-permission-text=\"Title is private\" data-url=\"https://github.com/PyGithub/PyGithub/issues/2968\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/PyGithub/PyGithub/pull/2968/hovercard\" href=\"https://github.com/PyGithub/PyGithub/pull/2968\">#2968</a> appears to add proper support for custom properties, but doesn't look like it's made it into a release yet.</p>","bodyText":"This comment contains the answer to your question:\nmy_repo.raw_data[\"custom_properties\"]\n#2968 appears to add proper support for custom properties, but doesn't look like it's made it into a release yet.","createdAt":"2024-08-23T06:36:50Z","databaseId":10426644,"discussion":{"id":"D_kwDOADYVqs4AaHoG"},"editor":null,"id":"DC_kwDOADYVqs4AnxkU","lastEditedAt":null,"updatedAt":"2024-08-23T06:36:51Z","url":"https://github.com/PyGithub/PyGithub/discussions/2993#discussioncomment-10426644"},"author":{"login":"heitorPB"},"body":"What is the equivalent of `https://api.github.com/repos/OWNER/REPO/properties/values`? I'm interested in getting/setting custom properties for my repos. I can do that with `curl`, but couldn't find a way to do it via this project.\r\n\r\nDocs here: [Get all custom property values for a repository](https://docs.github.com/en/rest/repos/custom-properties?apiVersion=2022-11-28#get-all-custom-property-values-for-a-repository).","bodyHTML":"<p dir=\"auto\">What is the equivalent of <code class=\"notranslate\">https://api.github.com/repos/OWNER/REPO/properties/values</code>? I'm interested in getting/setting custom properties for my repos. I can do that with <code class=\"notranslate\">curl</code>, but couldn't find a way to do it via this project.</p>\n<p dir=\"auto\">Docs here: <a href=\"https://docs.github.com/en/rest/repos/custom-properties?apiVersion=2022-11-28#get-all-custom-property-values-for-a-repository\">Get all custom property values for a repository</a>.</p>","bodyText":"What is the equivalent of https://api.github.com/repos/OWNER/REPO/properties/values? I'm interested in getting/setting custom properties for my repos. I can do that with curl, but couldn't find a way to do it via this project.\nDocs here: Get all custom property values for a repository.","category":{"createdAt":"2020-12-08T23:29:13Z","description":"Ask the community for help","emoji":":pray:","emojiHTML":"<div>🙏</div>","id":"MDE4OkRpc2N1c3Npb25DYXRlZ29yeTMyMDI5MDYx","isAnswerable":true,"name":"Q&A","repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"slug":"q-a","updatedAt":"2020-12-08T23:29:13Z"},"comments":{"totalCount":2,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOC0yM1QwODozNjo1MCswMjowMM4AnxkU","endCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOC0yOVQxODowMTowMCswMjowMM4AoA2V","hasNextPage":false,"hasPreviousPage":false},"nodes":[{"id":"DC_kwDOADYVqs4AnxkU"},{"id":"DC_kwDOADYVqs4AoA2V"}]},"createdAt":"2024-06-21T13:11:38Z","databaseId":6846982,"editor":null,"id":"D_kwDOADYVqs4AaHoG","labels":{"totalCount":0,"pageInfo":{"startCursor":null,"endCursor":null,"hasNextPage":false,"hasPreviousPage":false},"nodes":[]},"lastEditedAt":null,"number":2993,"reactions":{"totalCount":0,"pageInfo":{"startCursor":null,"endCursor":null,"hasNextPage":false,"hasPreviousPage":false},"nodes":[]},"repository":{"owner":{"login":"PyGithub"},"name":"PyGithub"},"title":"How to get a list of custom repository properties?","updatedAt":"2024-08-29T16:01:00Z","url":"https://github.com/PyGithub/PyGithub/discussions/2993"}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on Discussion { id }\n }\n }\n ", "variables": {"id": "D_kwDOADYVqs4AaHoG"}}
200
[('Date', 'Wed, 18 Sep 2024 09:55:02 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'public_repo, read:discussion, read:org, user:follow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1726656664'), ('X-RateLimit-Used', '22'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FA0:38937:5DC62D:5EA454:66EAA376')]
{"data":{"node":{"__typename":"Discussion","id":"D_kwDOADYVqs4AaHoG"}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation Mutation($input: AddDiscussionCommentInput!) { addDiscussionComment(input: $input) { comment { id body } } }", "variables": {"input": {"body": "test comment", "discussionId": "D_kwDOADYVqs4AaHoG", "replyToId": null}}}
200
[('Date', 'Wed, 18 Sep 2024 09:55:03 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'public_repo, read:discussion, read:org, user:follow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1726656664'), ('X-RateLimit-Used', '23'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FD6:2E4B5D:5DDE95:5EBC96:66EAA376')]
{"data":{"addDiscussionComment":{"comment":{"id":"DC_kwDOADYVqs4AovYk","body":"test comment"}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation Mutation($input: AddDiscussionCommentInput!) { addDiscussionComment(input: $input) { comment { id body } } }", "variables": {"input": {"body": "test reply", "discussionId": "D_kwDOADYVqs4AaHoG", "replyToId": "DC_kwDOADYVqs4AovYk"}}}
200
[('Date', 'Wed, 18 Sep 2024 09:55:03 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'public_repo, read:discussion, read:org, user:follow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4976'), ('X-RateLimit-Reset', '1726656664'), ('X-RateLimit-Used', '24'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FB4:12DC96:59403B:5A1DF2:66EAA377')]
{"data":{"addDiscussionComment":{"comment":{"id":"DC_kwDOADYVqs4AovYl","body":"test reply"}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation Mutation($input: AddDiscussionCommentInput!) { addDiscussionComment(input: $input) { comment { id body } } }", "variables": {"input": {"body": "test reply by string id", "discussionId": "D_kwDOADYVqs4AaHoG", "replyToId": "DC_kwDOADYVqs4AovYk"}}}
200
[('Date', 'Wed, 18 Sep 2024 09:55:04 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'public_repo, read:discussion, read:org, user:follow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4975'), ('X-RateLimit-Reset', '1726656664'), ('X-RateLimit-Used', '25'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FCC:385EF9:238109:23DAE5:66EAA377')]
{"data":{"addDiscussionComment":{"comment":{"id":"DC_kwDOADYVqs4AovYm","body":"test reply by string id"}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation Mutation($input: DeleteDiscussionCommentInput!) { deleteDiscussionComment(input: $input) { comment { id } } }", "variables": {"input": {"id": "DC_kwDOADYVqs4AovYm"}}}
200
[('Date', 'Wed, 18 Sep 2024 09:55:04 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'public_repo, read:discussion, read:org, user:follow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4974'), ('X-RateLimit-Reset', '1726656664'), ('X-RateLimit-Used', '26'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FEE:319EE5:223AF7A:22D58C8:66EAA378')]
{"data":{"deleteDiscussionComment":{"comment":{"id":"DC_kwDOADYVqs4AovYm"}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation Mutation($input: DeleteDiscussionCommentInput!) { deleteDiscussionComment(input: $input) { comment { id } } }", "variables": {"input": {"id": "DC_kwDOADYVqs4AovYl"}}}
200
[('Date', 'Wed, 18 Sep 2024 09:55:05 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'public_repo, read:discussion, read:org, user:follow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4973'), ('X-RateLimit-Reset', '1726656664'), ('X-RateLimit-Used', '27'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FD5:216D57:5BBEE5:5C9D60:66EAA379')]
{"data":{"deleteDiscussionComment":{"comment":{"id":"DC_kwDOADYVqs4AovYl"}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation Mutation($input: DeleteDiscussionCommentInput!) { deleteDiscussionComment(input: $input) { comment { id } } }", "variables": {"input": {"id": "DC_kwDOADYVqs4AovYk"}}}
200
[('Date', 'Wed, 18 Sep 2024 09:55:06 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'public_repo, read:discussion, read:org, user:follow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4972'), ('X-RateLimit-Reset', '1726656664'), ('X-RateLimit-Used', '28'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FA6:3A746F:5AB4A2:5B92B9:66EAA379')]
{"data":{"deleteDiscussionComment":{"comment":{"id":"DC_kwDOADYVqs4AovYk"}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on Discussion { id }\n }\n }\n ", "variables": {"id": "D_kwDOADYVqs4AaHoG"}}
200
[('Date', 'Tue, 17 Sep 2024 19:44:12 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '41'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FF5:1E58CD:A4D98A:A6B211:66E9DC0C')]
{"data":{"node":{"__typename":"Discussion","id":"D_kwDOADYVqs4AaHoG"}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($discussionId: ID!, $first: Int, $last: Int, $before: String, $after: String) {\n node(id: $discussionId) {\n ... on Discussion {\n comments(first: $first, last: $last, before: $before, after: $after) {\n totalCount\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes { id }\n }\n }\n }\n }", "variables": {"discussionId": "D_kwDOADYVqs4AaHoG", "first": 30}}
200
[('Date', 'Tue, 17 Sep 2024 19:44:12 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4958'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '42'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7F5C:1B4C5D:A62E39:A802C1:66E9DC0C')]
{"data":{"node":{"comments":{"totalCount":2,"pageInfo":{"startCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOC0yM1QwODozNjo1MCswMjowMM4AnxkU","endCursor":"Y3Vyc29yOnYyOpK5MjAyNC0wOC0yOVQxODowMTowMCswMjowMM4AoA2V","hasNextPage":false,"hasPreviousPage":false},"nodes":[{"id":"DC_kwDOADYVqs4AnxkU"},{"id":"DC_kwDOADYVqs4AoA2V"}]}}}}
https
POST
api.github.com
None
/graphql
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "\n query Q($id: ID!) {\n node(id: $id) {\n __typename\n ... on Discussion { title }\n }\n }\n ", "variables": {"id": "D_kwDOADYVqs4AaHoG"}}
200
[('Date', 'Tue, 17 Sep 2024 19:36:02 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'read:discussion, read:org'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-10-04 11:29:00 UTC'), ('X-GitHub-Media-Type', 'github.v4; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4971'), ('X-RateLimit-Reset', '1726602697'), ('X-RateLimit-Used', '29'), ('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'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7FA6:34173C:4D5D16:4E39DF:66E9DA22')]
{"data":{"node":{"__typename":"Discussion","title":"How to get a list of custom repository properties?"}}}
############################ Copyrights and license ############################
# #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #
# 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 <http://www.gnu.org/licenses/>. #
# #
################################################################################
from datetime import datetime, timezone
from . import Framework
class RepositoryDiscussion(Framework.TestCase):
discussion_schema = """
answer {
author { login }
body
bodyHTML
bodyText
createdAt
databaseId
discussion { id }
editor { login }
id
lastEditedAt
updatedAt
url
}
author { login }
body
bodyHTML
bodyText
category {
createdAt
description
emoji
emojiHTML
id
isAnswerable
name
repository { owner { login } name }
slug
updatedAt
}
comments(first: 10) {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
nodes {
id
}
}
createdAt
databaseId
editor { login }
id
labels(first: 10) {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
nodes {
id
name
}
}
lastEditedAt
number
reactions(first: 10) {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
nodes {
id
}
}
repository {
owner { login }
name
}
title
updatedAt
url
"""
def setUp(self):
super().setUp()
self.discussion = self.g.get_repository_discussion("D_kwDOADYVqs4AaHoG", self.discussion_schema)
def testAttributes(self):
self.assertEqual(self.discussion.answer.author.login, "dawngerpony")
self.assertEqual(
self.discussion.answer.body,
"""[This comment](https://github.com/PyGithub/PyGithub/issues/2895#issue-2118964108) contains the answer to your question:\r\n\r\n```python\r\nmy_repo.raw_data["custom_properties"]\r\n```\r\n\r\n#2968 appears to add proper support for custom properties, but doesn't look like it's made it into a release yet.""",
)
self.assertEqual(
self.discussion.answer.body_html,
"""<p dir="auto"><a href="https://github.com/PyGithub/PyGithub/issues/2895#issue-2118964108" data-hovercard-type="issue" data-hovercard-url="/PyGithub/PyGithub/issues/2895/hovercard">This comment</a> contains the answer to your question:</p>\n<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="my_repo.raw_data[&quot;custom_properties&quot;]"><pre class="notranslate"><span class="pl-s1">my_repo</span>.<span class="pl-s1">raw_data</span>[<span class="pl-s">"custom_properties"</span>]</pre></div>\n<p dir="auto"><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2293897055" data-permission-text="Title is private" data-url="https://github.com/PyGithub/PyGithub/issues/2968" data-hovercard-type="pull_request" data-hovercard-url="/PyGithub/PyGithub/pull/2968/hovercard" href="https://github.com/PyGithub/PyGithub/pull/2968">#2968</a> appears to add proper support for custom properties, but doesn't look like it's made it into a release yet.</p>""",
)
self.assertEqual(
self.discussion.answer.body_text,
"This comment contains the answer to your question:\nmy_repo.raw_data[\"custom_properties\"]\n#2968 appears to add proper support for custom properties, but doesn't look like it's made it into a release yet.",
)
self.assertEqual(self.discussion.answer.created_at, datetime(2024, 8, 23, 6, 36, 50, tzinfo=timezone.utc))
self.assertEqual(self.discussion.answer.database_id, 10426644)
self.assertEqual(self.discussion.answer.discussion.node_id, "D_kwDOADYVqs4AaHoG")
self.assertIsNone(self.discussion.answer.editor)
self.assertEqual(self.discussion.answer.node_id, "DC_kwDOADYVqs4AnxkU")
self.assertIsNone(self.discussion.answer.last_edited_at)
self.assertEqual(self.discussion.answer.updated_at, datetime(2024, 8, 23, 6, 36, 51, tzinfo=timezone.utc))
self.assertEqual(
self.discussion.answer.html_url,
"https://github.com/PyGithub/PyGithub/discussions/2993#discussioncomment-10426644",
)
self.assertEqual(self.discussion.author.login, "heitorPB")
self.assertEqual(
self.discussion.body,
"""What is the equivalent of `https://api.github.com/repos/OWNER/REPO/properties/values`? I'm interested in getting/setting custom properties for my repos. I can do that with `curl`, but couldn't find a way to do it via this project.\r\n\r\nDocs here: [Get all custom property values for a repository](https://docs.github.com/en/rest/repos/custom-properties?apiVersion=2022-11-28#get-all-custom-property-values-for-a-repository).""",
)
self.assertEqual(
self.discussion.body_html,
"""<p dir="auto">What is the equivalent of <code class="notranslate">https://api.github.com/repos/OWNER/REPO/properties/values</code>? I'm interested in getting/setting custom properties for my repos. I can do that with <code class="notranslate">curl</code>, but couldn't find a way to do it via this project.</p>\n<p dir="auto">Docs here: <a href="https://docs.github.com/en/rest/repos/custom-properties?apiVersion=2022-11-28#get-all-custom-property-values-for-a-repository">Get all custom property values for a repository</a>.</p>""",
)
self.assertEqual(
self.discussion.body_text,
"""What is the equivalent of https://api.github.com/repos/OWNER/REPO/properties/values? I'm interested in getting/setting custom properties for my repos. I can do that with curl, but couldn't find a way to do it via this project.\nDocs here: Get all custom property values for a repository.""",
)
self.assertEqual(self.discussion.category.created_at, datetime(2020, 12, 8, 23, 29, 13, tzinfo=timezone.utc))
self.assertEqual(self.discussion.category.description, "Ask the community for help")
self.assertEqual(self.discussion.category.emoji, ":pray:")
self.assertEqual(self.discussion.category.emoji_html, "<div>🙏</div>")
self.assertEqual(self.discussion.category.id, "MDE4OkRpc2N1c3Npb25DYXRlZ29yeTMyMDI5MDYx")
self.assertEqual(self.discussion.category.is_answerable, True)
self.assertEqual(self.discussion.category.name, "Q&A")
self.assertEqual(self.discussion.category.repository.owner.login, "PyGithub")
self.assertEqual(self.discussion.category.repository.name, "PyGithub")
self.assertEqual(self.discussion.category.slug, "q-a")
self.assertEqual(self.discussion.category.updated_at, datetime(2020, 12, 8, 23, 29, 13, tzinfo=timezone.utc))
self.assertEqual(self.discussion.created_at, datetime(2024, 6, 21, 13, 11, 38, tzinfo=timezone.utc))
self.assertEqual(self.discussion.database_id, 6846982)
self.assertIsNone(self.discussion.editor)
self.assertEqual(self.discussion.node_id, "D_kwDOADYVqs4AaHoG")
self.assertIsNone(self.discussion.last_edited_at)
self.assertEqual(self.discussion.number, 2993)
self.assertEqual(self.discussion.repository.owner.login, "PyGithub")
self.assertEqual(self.discussion.repository.name, "PyGithub")
self.assertEqual(self.discussion.title, "How to get a list of custom repository properties?")
self.assertEqual(self.discussion.updated_at, datetime(2024, 8, 29, 16, 1, 0, tzinfo=timezone.utc))
self.assertListEqual(
[c.node_id for c in self.discussion.get_comments("id")], ["DC_kwDOADYVqs4AnxkU", "DC_kwDOADYVqs4AoA2V"]
)
self.assertEqual(self.discussion.get_labels().totalCount, 0)
self.assertEqual(self.discussion.get_reactions().totalCount, 0)
def testGetComments(self):
discussion = self.g.get_repository_discussion("D_kwDOADYVqs4AaHoG", "id")
comments_pages = discussion.get_comments("id")
comments = list(comments_pages)
self.assertEqual(comments_pages.totalCount, 2)
self.assertEqual(len(comments), 2)
self.assertListEqual([c.id for c in comments], ["DC_kwDOADYVqs4AnxkU", "DC_kwDOADYVqs4AoA2V"])
def testGetCommentsWithoutNodeId(self):
discussion = self.g.get_repository_discussion("D_kwDOADYVqs4AaHoG", "title")
with self.assertRaises(RuntimeError) as e:
discussion.get_comments("id")
self.assertEqual(e.exception.args, ("Retrieving discussion comments requires the discussion field 'id'",))
def testAddAndDeleteComment(self):
discussion = self.g.get_repository_discussion("D_kwDOADYVqs4AaHoG", "id")
comment = discussion.add_comment("test comment", output_schema="id body")
self.assertEqual(comment.id, "DC_kwDOADYVqs4AovYk")
self.assertEqual(comment.body, "test comment")
reply = discussion.add_comment("test reply", reply_to=comment, output_schema="id body")
self.assertEqual(reply.id, "DC_kwDOADYVqs4AovYl")
self.assertEqual(reply.body, "test reply")
reply_by_id_str = discussion.add_comment(
"test reply by string id", reply_to=comment.id, output_schema="id body"
)
self.assertEqual(reply_by_id_str.id, "DC_kwDOADYVqs4AovYm")
self.assertEqual(reply_by_id_str.body, "test reply by string id")
# cleanup that discussion
# replies have to be deleted first to be able to fully delete a comment
self.assertEqual(reply_by_id_str.delete().id, "DC_kwDOADYVqs4AovYm")
self.assertEqual(reply.delete().id, "DC_kwDOADYVqs4AovYl")
self.assertEqual(comment.delete().id, "DC_kwDOADYVqs4AovYk")
+3
-3

@@ -16,5 +16,5 @@ name: Build package

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:

@@ -30,5 +30,5 @@ python-version: '3.x'

- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: ${{ inputs.artifact-name }}
path: dist

@@ -36,3 +36,13 @@ name: Lint

python-version: "3.x"
- uses: pre-commit/action@v3.0.0
# FIXME: pin pre-commit<4 pending PyCQA/docformatter#287
- name: install pre-commit
run: python -m pip install 'pre-commit<4'
- name: show environment
run: python -m pip freeze --local
- uses: actions/cache@v4
with:
path: ~/.cache/pre-commit
key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
- name: run pre-commit
run: pre-commit run --show-diff-on-failure --color=always --all-files

@@ -39,0 +49,0 @@ docs:

@@ -17,3 +17,3 @@ name: Publish to PyPI

steps:
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:

@@ -20,0 +20,0 @@ name: package

@@ -42,1 +42,10 @@ Utilities

.. autoclass:: github.InputGitTreeElement.InputGitTreeElement
Raw Requests
------------
If you need to make requests to APIs not yet supported by PyGithub,
you can use the :class:`.Requester` object directly, available as :attr:`object.requester` on most PyGithub objects.
.. autoclass:: github.Requester.Requester
:members:

@@ -51,2 +51,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Chris Wells <ping@cwlls.com> #
# Copyright 2024 Eduardo Ramírez <edu.rh90@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #

@@ -1070,2 +1071,13 @@ # Copyright 2024 Oskar Jansson <56458534+janssonoskar@users.noreply.github.com>#

def get_organization_memberships(self) -> PaginatedList[Membership]:
"""
:calls: `GET /user/memberships/orgs/ <https://docs.github.com/en/rest/orgs/members#list-organization-memberships-for-the-authenticated-user>`_
"""
return PaginatedList(
github.Membership.Membership,
self._requester,
"/user/memberships/orgs",
None,
)
def get_organization_membership(self, org: str) -> Membership:

@@ -1072,0 +1084,0 @@ """

@@ -128,7 +128,7 @@ ############################ Copyrights and license ############################

{},
None,
"files",
"total_files",
self.raw_data,
self.raw_headers,
headers=None,
list_item="files",
total_count_item="total_files",
firstData=self.raw_data,
firstHeaders=self.raw_headers,
)

@@ -135,0 +135,0 @@

@@ -94,7 +94,7 @@ ############################ Copyrights and license ############################

{},
None,
"commits",
"total_commits",
self.raw_data,
self.raw_headers,
headers=None,
list_item="commits",
total_count_item="total_commits",
firstData=self.raw_data,
firstHeaders=self.raw_headers,
)

@@ -101,0 +101,0 @@

@@ -94,4 +94,4 @@ ############################ Copyrights and license ############################

url_parameters,
None,
"users",
headers=None,
list_item="users",
firstData=self.raw_data,

@@ -98,0 +98,0 @@ firstHeaders=self.raw_headers,

@@ -12,2 +12,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2024 Min RK <benjaminrk@gmail.com> #
# #

@@ -186,2 +187,12 @@ # This file is part of PyGithub. #

@property
def requester(self) -> Requester:
"""
Return my Requester object.
For example, to make requests to API endpoints not yet supported by PyGitHub.
"""
return self.__requester
def _get_headers(self) -> dict[str, str]:

@@ -250,4 +261,6 @@ """

:calls: `GET /repos/{owner}/{repo}/installation
<https://docs.github.com/en/rest/reference/apps#get-a-repository-installation-for-the-authenticated-app>`
:calls:`GET /repos/{owner}/{repo}/installation <https://docs.github.com/en/rest/reference/apps#get-a-repository-
installation-for-the-authenticated-app>`
:calls:`GET /repos/{owner}/{repo}/installation <https://docs.github.com/en/rest/reference/apps#get-a-repository-
installation-for-the-authenticated-app>`

@@ -254,0 +267,0 @@ """

@@ -31,2 +31,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2024 Min RK <benjaminrk@gmail.com> #
# #

@@ -52,2 +53,3 @@ # This file is part of PyGithub. #

import email.utils
import re
import typing

@@ -57,3 +59,3 @@ from datetime import datetime, timezone

from operator import itemgetter
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple, Type, Union
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple, Type, Union, overload

@@ -145,2 +147,58 @@ from typing_extensions import Protocol, TypeGuard

camel_to_snake_case_regexp = re.compile(r"(?<!^)(?=[A-Z])")
@overload
def as_rest_api_attributes(graphql_attributes: Dict[str, Any]) -> Dict[str, Any]:
...
@overload
def as_rest_api_attributes(graphql_attributes: None) -> None:
...
def as_rest_api_attributes(graphql_attributes: Optional[Dict[str, Any]]) -> Optional[Dict[str, Any]]:
"""
Converts attributes from GraphQL schema to REST API schema.
The GraphQL API uses lower camel case (e.g. createdAt), whereas REST API uses snake case (created_at). Initializing
REST API GithubObjects from GraphQL API attributes requires transformation provided by this method.
Further renames GraphQL attributes to REST API attributes where the case conversion is not sufficient. For example,
GraphQL attribute 'id' is equivalent to REST API attribute 'node_id'.
"""
if graphql_attributes is None:
return None
attribute_translation = {
"id": "node_id",
"databaseId": "id", # must be after 'id': 'node_id'!
"url": "html_url",
}
def translate(attr: str) -> str:
def un_capitalize(match: re.Match) -> str:
return match.group(1) + match.group(2).lower()
attr = attribute_translation.get(attr, attr)
attr = re.sub(r"([A-Z])([A-Z]+)", un_capitalize, attr)
attr = camel_to_snake_case_regexp.sub("_", attr)
attr = attr.lower()
return attr
return {
translate(k): as_rest_api_attributes(v)
if isinstance(v, dict)
else (as_rest_api_attributes_list(v) if isinstance(v, list) else v)
for k, v in graphql_attributes.items()
}
def as_rest_api_attributes_list(graphql_attributes: List[Optional[Dict[str, Any]]]) -> List[Optional[Dict[str, Any]]]:
return [as_rest_api_attributes(v) if isinstance(v, dict) else v for v in graphql_attributes]
class _ValuedAttribute(Attribute[T]):

@@ -180,2 +238,10 @@ def __init__(self, value: T):

@classmethod
def is_rest(cls) -> bool:
return not cls.is_graphql()
@classmethod
def is_graphql(cls) -> bool:
return False
@classmethod
def setCheckAfterInitFlag(cls, flag: bool) -> None:

@@ -208,2 +274,12 @@ cls.CHECK_AFTER_INIT_FLAG = flag

@property
def requester(self) -> "Requester":
"""
Return my Requester object.
For example, to make requests to API endpoints not yet supported by PyGitHub.
"""
return self._requester
@property
def raw_data(self) -> Dict[str, Any]:

@@ -396,2 +472,8 @@ """

class GraphQlObject:
@classmethod
def is_graphql(cls) -> bool:
return True
class NonCompletableGithubObject(GithubObject):

@@ -398,0 +480,0 @@ def _completeIfNeeded(self) -> None:

@@ -24,2 +24,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2024 Min RK <benjaminrk@gmail.com> #
# #

@@ -109,2 +110,12 @@ # This file is part of PyGithub. #

@property
def requester(self) -> Requester:
"""
Return my Requester object.
For example, to make requests to API endpoints not yet supported by PyGitHub.
"""
return self._requester
@property
def id(self) -> int:

@@ -111,0 +122,0 @@ return self._id.value

@@ -207,7 +207,7 @@ ############################ Copyrights and license ############################

_, data = self._requester.graphql_named_mutation(
mutation_name="minimize_comment",
variables={"input": NotSet.remove_unset_items(variables)},
output="minimizedComment { isMinimized }",
mutation_name="minimizeComment",
mutation_input=NotSet.remove_unset_items(variables),
output_schema="minimizedComment { isMinimized }",
)
return data["data"]["minimizeComment"]["minimizedComment"]["isMinimized"] is True
return data["minimizedComment"]["isMinimized"] is True

@@ -223,7 +223,7 @@ def unminimize(self) -> bool:

_, data = self._requester.graphql_named_mutation(
mutation_name="unminimize_comment",
variables={"input": NotSet.remove_unset_items(variables)},
output="unminimizedComment { isMinimized }",
mutation_name="unminimizeComment",
mutation_input=NotSet.remove_unset_items(variables),
output_schema="unminimizedComment { isMinimized }",
)
return data["data"]["unminimizeComment"]["unminimizedComment"]["isMinimized"] is False
return data["unminimizedComment"]["isMinimized"] is False

@@ -230,0 +230,0 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None:

@@ -74,2 +74,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2024 Min RK <benjaminrk@gmail.com> #
# #

@@ -147,2 +148,3 @@ # This file is part of PyGithub. #

from github.Repository import Repository
from github.RepositoryDiscussion import RepositoryDiscussion
from github.Topic import Topic

@@ -279,2 +281,12 @@

@property
def requester(self) -> Requester:
"""
Return my Requester object.
For example, to make requests to API endpoints not yet supported by PyGitHub.
"""
return self.__requester
@property
def FIX_REPO_GET_GIT_REF(self) -> bool:

@@ -322,4 +334,3 @@ return self.__requester.FIX_REPO_GET_GIT_REF

:calls: `GET /rate_limit
<https://docs.github.com/en/rest/reference/rate-limit>`_
:calls:`GET /rate_limit <https://docs.github.com/en/rest/reference/rate-limit>`_

@@ -465,2 +476,7 @@ """

def get_repository_discussion(self, node_id: str, discussion_graphql_schema: str) -> RepositoryDiscussion:
return self.__requester.graphql_node_class(
node_id, discussion_graphql_schema, github.RepositoryDiscussion.RepositoryDiscussion, "Discussion"
)
def get_project(self, id: int) -> Project:

@@ -467,0 +483,0 @@ """

@@ -121,3 +121,4 @@ ############################ Copyrights and license ############################

"""
This class abstracts the `pagination of the API <https://docs.github.com/en/rest/guides/traversing-with-pagination>`_.
This class abstracts the `pagination of the REST API <https://docs.github.com/en/rest/guides/traversing-with-pagination>`_
and the GraphQl API <https://docs.github.com/en/graphql/guides/using-pagination-in-the-graphql-api>`_.

@@ -145,6 +146,10 @@ You can simply enumerate through instances of this class::

some_repos = user.get_repos().get_page(0)
some_other_repos = user.get_repos().get_page(3)
repos = user.get_repos()
assert repos.is_rest, "get_page not supported by the GraphQL API"
some_repos = repos.get_page(0)
some_other_repos = repos.get_page(3)
"""
# v3: move * before firstUrl and fix call sites
def __init__(

@@ -154,6 +159,7 @@ self,

requester: Requester,
firstUrl: str,
firstParams: Any,
firstUrl: Optional[str] = None,
firstParams: Optional[Dict[str, Any]] = None,
*,
headers: Optional[Dict[str, str]] = None,
list_item: str = "items",
list_item: Union[str, List[str]] = "items",
total_count_item: str = "total_count",

@@ -163,9 +169,21 @@ firstData: Optional[Any] = None,

attributesTransformer: Optional[Callable[[Dict[str, Any]], Dict[str, Any]]] = None,
graphql_query: Optional[str] = None,
graphql_variables: Optional[Dict[str, Any]] = None,
):
if firstUrl is None and firstData is None and graphql_query is None:
raise ValueError("Either firstUrl or graphql_query must be given")
if firstUrl is not None and graphql_query is not None:
raise ValueError("Only one of firstUrl or graphql_query can be given")
if graphql_query is not None:
if not (isinstance(list_item, list) and all(isinstance(item, str) for item in list_item)):
raise ValueError("With graphql_query given, item_list must be a list of strings")
self.__requester = requester
self.__contentClass = contentClass
self.__is_rest = firstUrl is not None or firstData is not None
self.__firstUrl = firstUrl
self.__firstParams = firstParams or ()
self.__firstParams: Dict[str, Any] = firstParams or {}
self.__nextUrl = firstUrl
self.__nextParams = firstParams or {}
self.__nextParams: Dict[str, Any] = firstParams or {}
self.__headers = headers

@@ -180,7 +198,22 @@ self.__list_item = list_item

self.__graphql_query = graphql_query
self.__graphql_variables = graphql_variables or {}
self.__page_info = None
first_page = []
if firstData is not None and firstHeaders is not None:
if firstData is not None:
first_page = self._getPage(firstData, firstHeaders)
# this paginated list contains a single page
if self.__nextUrl is None and self.__totalCount is None:
self.__totalCount = len(first_page)
super().__init__(first_page)
@property
def is_rest(self) -> bool:
return self.__is_rest
@property
def is_graphql(self) -> bool:
return not self.is_rest
def _transformAttributes(self, element: Dict[str, Any]) -> Dict[str, Any]:

@@ -193,25 +226,38 @@ if self._attributesTransformer is None:

def totalCount(self) -> int:
if not self.__totalCount:
params = {} if self.__nextParams is None else self.__nextParams.copy()
# set per_page = 1 so the totalCount is just the number of pages
params.update({"per_page": 1})
headers, data = self.__requester.requestJsonAndCheck(
"GET", self.__firstUrl, parameters=params, headers=self.__headers
)
if "link" not in headers:
if data and "total_count" in data:
self.__totalCount = data["total_count"]
elif data:
if isinstance(data, dict):
data = data[self.__list_item]
self.__totalCount = len(data)
if self.__totalCount is None:
if self.is_rest:
params = self.__nextParams.copy()
# set per_page = 1 so the totalCount is just the number of pages
params.update({"per_page": 1})
headers, data = self.__requester.requestJsonAndCheck(
"GET", self.__firstUrl, parameters=params, headers=self.__headers # type: ignore
)
if "link" not in headers:
if data and "total_count" in data:
self.__totalCount = data["total_count"]
elif data:
if isinstance(data, dict):
data = data[self.__list_item]
self.__totalCount = len(data)
else:
self.__totalCount = 0
else:
self.__totalCount = 0
links = self.__parseLinkHeader(headers)
lastUrl = links.get("last")
if lastUrl:
self.__totalCount = int(parse_qs(lastUrl)["page"][0])
else:
self.__totalCount = 0
else:
links = self.__parseLinkHeader(headers)
lastUrl = links.get("last")
if lastUrl:
self.__totalCount = int(parse_qs(lastUrl)["page"][0])
variables = self.__graphql_variables.copy()
if not self._reversed:
variables["first"] = 1
variables["after"] = None
else:
self.__totalCount = 0
variables["last"] = 1
variables["before"] = None
_, data = self.__requester.graphql_query(self.__graphql_query, variables) # type: ignore
pagination = self._get_graphql_pagination(data["data"], self.__list_item) # type: ignore
self.__totalCount = pagination.get("totalCount")
return self.__totalCount # type: ignore

@@ -221,3 +267,3 @@

headers, data = self.__requester.requestJsonAndCheck(
"GET", self.__firstUrl, parameters=self.__nextParams, headers=self.__headers
"GET", self.__firstUrl, parameters=self.__nextParams, headers=self.__headers # type: ignore
)

@@ -234,5 +280,7 @@ links = self.__parseLinkHeader(headers)

self.__firstParams,
self.__headers,
self.__list_item,
headers=self.__headers,
list_item=self.__list_item,
attributesTransformer=self._attributesTransformer,
graphql_query=self.__graphql_query,
graphql_variables=self.__graphql_variables,
)

@@ -244,41 +292,115 @@ r.__reverse()

self._reversed = True
lastUrl = self._getLastPageUrl()
if lastUrl:
self.__nextUrl = lastUrl
if self.is_rest:
lastUrl = self._getLastPageUrl()
if lastUrl:
self.__nextUrl = lastUrl
if self.__nextParams:
# #2929: remove all parameters from self.__nextParams contained in self.__nextUrl
self.__nextParams = {
k: v
for k, v in self.__nextParams.items()
if k not in Requester.get_parameters_of_url(self.__nextUrl).keys()
}
def _couldGrow(self) -> bool:
return self.__nextUrl is not None
return (
self.is_rest
and self.__nextUrl is not None
or self.is_graphql
and (
self.__page_info is None
or not self._reversed
and self.__page_info["hasNextPage"]
or self._reversed
and self.__page_info["hasPreviousPage"]
)
)
def _get_graphql_pagination(self, data: Dict[str, Any], path: List[str]) -> Dict[str, Any]:
for item in path:
if item not in data:
raise RuntimeError(f"Pagination path {path} not found in data: {self.paths_of_dict(data)}")
data = data[item]
return data
def _fetchNextPage(self) -> List[T]:
headers, data = self.__requester.requestJsonAndCheck(
"GET", self.__nextUrl, parameters=self.__nextParams, headers=self.__headers
)
data = data if data else []
return self._getPage(data, headers)
if self.is_rest:
# REST API pagination
headers, data = self.__requester.requestJsonAndCheck(
"GET", self.__nextUrl, parameters=self.__nextParams, headers=self.__headers # type: ignore
)
data = data if data else []
return self._getPage(data, headers)
else:
# GraphQL API pagination
variables = self.__graphql_variables.copy()
if not self._reversed:
variables["first"] = self.__requester.per_page
if self.__page_info is not None:
variables["after"] = self.__page_info["endCursor"]
else:
variables["last"] = self.__requester.per_page
if self.__page_info is not None:
variables["before"] = self.__page_info["startCursor"]
def _getPage(self, data: Any, headers: Dict[str, Any]) -> List[T]:
self.__nextUrl = None # type: ignore
if len(data) > 0:
links = self.__parseLinkHeader(headers)
_, data = self.__requester.graphql_query(self.__graphql_query, variables) # type: ignore
pagination = self._get_graphql_pagination(data["data"], self.__list_item) # type: ignore
return self._getPage(pagination, {})
def _getPage(self, data: Any, headers: Optional[Dict[str, Union[str, int]]]) -> List[T]:
if self.is_rest:
self.__nextUrl = None # type: ignore
if len(data) > 0:
links = self.__parseLinkHeader(headers) # type: ignore
if self._reversed:
if "prev" in links:
self.__nextUrl = links["prev"]
elif "next" in links:
self.__nextUrl = links["next"]
self.__nextParams = {}
if self.__list_item in data:
self.__totalCount = data.get(self.__total_count_item)
data = data[self.__list_item]
content = [
self.__contentClass(self.__requester, headers, self._transformAttributes(element), completed=False) # type: ignore
for element in data
if element is not None
]
if self._reversed:
if "prev" in links:
self.__nextUrl = links["prev"]
elif "next" in links:
self.__nextUrl = links["next"]
self.__nextParams = None
if self.__list_item in data:
self.__totalCount = data.get(self.__total_count_item)
data = data[self.__list_item]
content = [
self.__contentClass(self.__requester, headers, self._transformAttributes(element), completed=False)
for element in data
if element is not None
]
if self._reversed:
return content[::-1]
return content
return content[::-1]
return content
else:
if "pageInfo" not in data:
raise RuntimeError(f"Query must provide pagination with pageInfo:\n{self.__graphql_query}")
def __parseLinkHeader(self, headers: Dict[str, str]) -> Dict[str, str]:
self.__page_info = data["pageInfo"]
if any(
item not in self.__page_info # type: ignore
for item in ["startCursor", "endCursor", "hasNextPage", "hasPreviousPage"]
):
raise RuntimeError(f"Query must provide pagination with pageInfo\n{self.__graphql_query}")
if self.__totalCount is None:
if "totalCount" not in data:
raise RuntimeError(f"Query must provide totalCount\n{self.__graphql_query}")
self.__totalCount = data["totalCount"]
if "nodes" not in data:
raise RuntimeError(
f"No nodes found under pagination path {self.__list_item}: {self.paths_of_dict(data)}"
)
nodes = data["nodes"]
if self._reversed:
nodes = nodes[::-1]
return [
self.__contentClass(self.__requester, {}, element, completed=False)
for element in nodes
if element is not None
]
def __parseLinkHeader(self, headers: Dict[str, Union[str, int]]) -> Dict[str, str]:
links = {}
if "link" in headers:
if "link" in headers and isinstance(headers["link"], str):
linkHeaders = headers["link"].split(", ")

@@ -293,2 +415,5 @@ for linkHeader in linkHeaders:

def get_page(self, page: int) -> List[T]:
if self.is_graphql:
raise RuntimeError("Not supported for GraphQL pagination")
params = dict(self.__firstParams)

@@ -300,3 +425,3 @@ if page != 0:

headers, data = self.__requester.requestJsonAndCheck(
"GET", self.__firstUrl, parameters=params, headers=self.__headers
"GET", self.__firstUrl, parameters=params, headers=self.__headers # type: ignore
)

@@ -331,1 +456,5 @@

return d1
@classmethod
def paths_of_dict(cls, d: dict) -> dict:
return {key: cls.paths_of_dict(val) if isinstance(val, dict) else None for key, val in d.items()}

@@ -204,3 +204,3 @@ ############################ Copyrights and license ############################

None,
{"Accept": Consts.mediaTypeProjectsPreview},
headers={"Accept": Consts.mediaTypeProjectsPreview},
)

@@ -207,0 +207,0 @@

@@ -132,3 +132,3 @@ ############################ Copyrights and license ############################

url_parameters,
{"Accept": Consts.mediaTypeProjectsPreview},
headers={"Accept": Consts.mediaTypeProjectsPreview},
)

@@ -135,0 +135,0 @@

@@ -49,2 +49,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Evan Fetsko <emfetsko@gmail.com> #
# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> #

@@ -781,3 +782,3 @@ # Copyright 2024 Kobbi Gal <85439776+kgal-pan@users.noreply.github.com> #

if not force:
remaining_pulls = self.head.repo.get_pulls(head=self.head.ref)
remaining_pulls = self.head.repo.get_pulls(head=f"{self.head.repo.owner.login}:{self.head.ref}")
if remaining_pulls.totalCount > 0:

@@ -822,5 +823,5 @@ raise RuntimeError(

_, data = self._requester.graphql_named_mutation(
mutation_name="enable_pull_request_auto_merge",
variables={"input": NotSet.remove_unset_items(variables)},
output="actor { avatarUrl login resourcePath url } clientMutationId",
mutation_name="enablePullRequestAutoMerge",
mutation_input=NotSet.remove_unset_items(variables),
output_schema="actor { avatarUrl login resourcePath url } clientMutationId",
)

@@ -847,5 +848,5 @@ return data

_, data = self._requester.graphql_named_mutation(
mutation_name="disable_pull_request_auto_merge",
variables={"input": NotSet.remove_unset_items(variables)},
output="actor { avatarUrl login resourcePath url } clientMutationId",
mutation_name="disablePullRequestAutoMerge",
mutation_input=NotSet.remove_unset_items(variables),
output_schema="actor { avatarUrl login resourcePath url } clientMutationId",
)

@@ -852,0 +853,0 @@ return data

@@ -59,2 +59,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Kobbi Gal <85439776+kgal-pan@users.noreply.github.com> #
# Copyright 2024 Min RK <benjaminrk@gmail.com> #
# #

@@ -114,3 +115,5 @@ # This file is part of PyGithub. #

import github.Consts as Consts
import github.GithubException
import github.GithubException as GithubException
from github.GithubObject import as_rest_api_attributes

@@ -124,2 +127,3 @@ if TYPE_CHECKING:

T = TypeVar("T")
T_gh = TypeVar("T_gh", bound="GithubObject")

@@ -477,2 +481,25 @@ # For App authentication, time remaining before token expiration to request a new one

@staticmethod
def get_parameters_of_url(url: str) -> Dict[str, list]:
query = urllib.parse.urlparse(url)[4]
return urllib.parse.parse_qs(query)
@staticmethod
def add_parameters_to_url(
url: str,
parameters: Dict[str, Any],
) -> str:
scheme, netloc, url, params, query, fragment = urllib.parse.urlparse(url)
url_params = urllib.parse.parse_qs(query)
# union parameters in url with given parameters, the latter have precedence
url_params.update(**{k: v if isinstance(v, list) else [v] for k, v in parameters.items()})
parameter_list = [(key, value) for key, values in url_params.items() for value in values]
# remove query from url
url = urllib.parse.urlunparse((scheme, netloc, url, params, "", fragment))
if len(parameter_list) == 0:
return url
else:
return f"{url}?{urllib.parse.urlencode(parameter_list)}"
def close(self) -> None:

@@ -554,2 +581,11 @@ """

) -> Tuple[Dict[str, Any], Any]:
"""
Send a request with JSON body.
:param input: request body, serialized to JSON if specified
:return: ``(headers: dict, JSON Response: Any)``
:raises: :class:`GithubException` for error status codes
"""
return self.__check(*self.requestJson(verb, url, parameters, headers, input, self.__customConnection(url)))

@@ -565,2 +601,11 @@

) -> Tuple[Dict[str, Any], Optional[Dict[str, Any]]]:
"""
Send a request with multi-part-encoded body.
:param input: request body, will be multi-part encoded if specified
:return: ``(headers: dict, JSON Response: Any)``
:raises: :class:`GithubException` for error status codes
"""
return self.__check(*self.requestMultipart(verb, url, parameters, headers, input, self.__customConnection(url)))

@@ -577,2 +622,11 @@

) -> Tuple[Dict[str, Any], Dict[str, Any]]:
"""
Send a request with a file for the body.
:param input: path to a file to use for the request body
:return: ``(headers: dict, JSON Response: Any)``
:raises: :class:`GithubException` for error status codes
"""
return self.__check(*self.requestBlob(verb, url, parameters, headers, input, self.__customConnection(url)))

@@ -588,24 +642,103 @@

if "errors" in data:
if len(data["errors"]) == 1:
error = data["errors"][0]
if error.get("type") == "NOT_FOUND":
raise github.UnknownObjectException(404, data, response_headers, error.get("message"))
raise self.createException(400, response_headers, data)
return response_headers, data
@classmethod
def paths_of_dict(cls, d: dict) -> dict:
return {key: cls.paths_of_dict(val) if isinstance(val, dict) else None for key, val in d.items()}
def data_as_class(
self, headers: Dict[str, Any], data: Dict[str, Any], data_path: List[str], klass: Type[T_gh]
) -> T_gh:
for item in data_path:
if item not in data:
raise RuntimeError(f"GraphQL path {data_path} not found in data: {self.paths_of_dict(data)}")
data = data[item]
if klass.is_rest():
data = as_rest_api_attributes(data)
return klass(self, headers, data, completed=False)
def graphql_node(self, node_id: str, graphql_schema: str, node_type: str) -> Tuple[Dict[str, Any], Dict[str, Any]]:
"""
:calls: `POST /graphql <https://docs.github.com/en/graphql>`_
"""
if not graphql_schema.startswith("\n"):
graphql_schema = f" {graphql_schema} "
query = (
"""
query Q($id: ID!) {
node(id: $id) {
__typename
... on """
+ f"{node_type} {{{graphql_schema}}}"
+ """
}
}
"""
)
headers, data = self.graphql_query(query, {"id": node_id})
actual_node_type = data.get("data", {}).get("node", {}).get("__typename", node_type)
if actual_node_type != node_type:
raise github.GithubException(
400,
data,
message=f"Retrieved {node_type} object is of different type: {actual_node_type}",
)
return headers, data
def graphql_node_class(
self, node_id: str, graphql_schema: str, klass: Type[T_gh], node_type: Optional[str] = None
) -> T_gh:
"""
:calls: `POST /graphql <https://docs.github.com/en/graphql>`_
"""
if node_type is None:
node_type = klass.__name__
headers, data = self.graphql_node(node_id, graphql_schema, node_type)
return self.data_as_class(headers, data, ["data", "node"], klass)
def graphql_query_class(
self, query: str, variables: Dict[str, Any], data_path: List[str], klass: Type[T_gh]
) -> T_gh:
"""
:calls: `POST /graphql <https://docs.github.com/en/graphql>`_
"""
headers, data = self.graphql_query(query, variables)
return self.data_as_class(headers, data, ["data"] + data_path, klass)
def graphql_named_mutation(
self, mutation_name: str, variables: Dict[str, Any], output: Optional[str] = None
self, mutation_name: str, mutation_input: Dict[str, Any], output_schema: str
) -> Tuple[Dict[str, Any], Dict[str, Any]]:
"""
Create a mutation in the format:
mutation MutationName($input: MutationNameInput!) {
mutationName(input: $input) {
<output>
}
mutation Mutation($input: MutationNameInput!) {
mutationName(input: $input) { <output_schema> }
}
and call the self.graphql_query method
and call the self.graphql_query method.
Returns the response data according to given output schema.
"""
title = "".join([x.capitalize() for x in mutation_name.split("_")])
mutation_name = title[:1].lower() + title[1:]
output = output or ""
query = f"mutation {title}($input: {title}Input!) {{ {mutation_name}(input: $input) {{ {output} }} }}"
mutation_input_name = mutation_name[:1].upper() + mutation_name[1:] + "Input!"
query = f"mutation Mutation($input: {mutation_input_name}) {{ {mutation_name}(input: $input) {{ {output_schema} }} }}"
headers, data = self.graphql_query(query, {"input": mutation_input})
return headers, data.get("data", {}).get(mutation_name, {})
return self.graphql_query(query, variables)
def graphql_named_mutation_class(
self, mutation_name: str, mutation_input: Dict[str, Any], output_schema: str, item: str, klass: Type[T_gh]
) -> T_gh:
"""
Executes a mutation and returns the output object as the given GithubObject.
See {@link graphql_named_mutation}.
"""
headers, data = self.graphql_named_mutation(mutation_name, mutation_input, output_schema)
return self.data_as_class(headers, data, [item], klass)
def __check(

@@ -720,2 +853,10 @@ self,

) -> Tuple[int, Dict[str, Any], str]:
"""
Send a request with JSON input.
:param input: request body, will be serialized as JSON
:returns:``(status, headers, body)``
"""
def encode(input: Any) -> Tuple[str, str]:

@@ -735,2 +876,10 @@ return "application/json", json.dumps(input)

) -> Tuple[int, Dict[str, Any], str]:
"""
Send a request with multi-part encoding.
:param input: request body, will be serialized as multipart form data
:returns:``(status, headers, body)``
"""
def encode(input: Dict[str, Any]) -> Tuple[str, str]:

@@ -760,2 +909,9 @@ boundary = "----------------------------3c3ba8b523b2"

) -> Tuple[int, Dict[str, Any], str]:
"""
Send a request with a file as request body.
:param input: path to a local file to use for request body
:returns:``(status, headers, body)``
"""
if headers is None:

@@ -786,2 +942,11 @@ headers = {}

) -> Tuple[Dict[str, Any], Any]:
"""
Send a request with a binary file-like for the body.
:param file_like: file-like object to use for the request body
:return: ``(headers: dict, JSON Response: Any)``
:raises: :class:`GithubException` for error status codes
"""
# The expected signature of encode means that the argument is ignored.

@@ -816,3 +981,3 @@ def encode(_: Any) -> Tuple[str, Any]:

url = self.__makeAbsoluteUrl(url)
url = self.__addParametersToUrl(url, parameters)
url = Requester.add_parameters_to_url(url, parameters)

@@ -953,12 +1118,2 @@ encoded_input = None

def __addParametersToUrl(
self,
url: str,
parameters: Dict[str, Any],
) -> str:
if len(parameters) == 0:
return url
else:
return f"{url}?{urllib.parse.urlencode(parameters)}"
def __createConnection(

@@ -965,0 +1120,0 @@ self,

@@ -47,11 +47,9 @@ ############################ Copyrights and license ############################

from datetime import datetime
from typing import Any
import github.GithubObject
import github.NamedUser
from github.GithubObject import Attribute, CompletableGithubObject, NotSet
from github.DiscussionBase import DiscussionBase
from github.GithubObject import Attribute, NotSet
class TeamDiscussion(CompletableGithubObject):
class TeamDiscussion(DiscussionBase):
"""

@@ -66,39 +64,13 @@ This class represents TeamDiscussions.

def _initAttributes(self) -> None:
self._author: Attribute[github.NamedUser.NamedUser] = NotSet
self._body: Attribute[str] = NotSet
self._body_html: Attribute[str] = NotSet
super()._initAttributes()
self._body_version: Attribute[str] = NotSet
self._comments_count: Attribute[int] = NotSet
self._comments_url: Attribute[str] = NotSet
self._created_at: Attribute[datetime] = NotSet
self._html_url: Attribute[str] = NotSet
self._last_edited_at: Attribute[datetime] = NotSet
self._node_id: Attribute[str] = NotSet
self._number: Attribute[int] = NotSet
self._pinned: Attribute[bool] = NotSet
self._private: Attribute[bool] = NotSet
self._team_url: Attribute[str] = NotSet
self._title: Attribute[str] = NotSet
self._updated_at: Attribute[datetime] = NotSet
self._url: Attribute[str] = NotSet
def __repr__(self) -> str:
return self.get__repr__({"number": self._number.value, "title": self._title.value})
@property
def author(self) -> github.NamedUser.NamedUser:
self._completeIfNotSet(self._author)
return self._author.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_version(self) -> str:

@@ -119,7 +91,2 @@ self._completeIfNotSet(self._body_version)

@property
def created_at(self) -> datetime:
self._completeIfNotSet(self._created_at)
return self._created_at.value
@property
def html_url(self) -> str:

@@ -130,7 +97,2 @@ self._completeIfNotSet(self._html_url)

@property
def last_edited_at(self) -> datetime:
self._completeIfNotSet(self._last_edited_at)
return self._last_edited_at.value
@property
def node_id(self) -> str:

@@ -141,7 +103,2 @@ self._completeIfNotSet(self._node_id)

@property
def number(self) -> int:
self._completeIfNotSet(self._number)
return self._number.value
@property
def pinned(self) -> bool:

@@ -161,24 +118,4 @@ self._completeIfNotSet(self._pinned)

@property
def title(self) -> str:
self._completeIfNotSet(self._title)
return self._title.value
@property
def updated_at(self) -> datetime:
self._completeIfNotSet(self._updated_at)
return self._updated_at.value
@property
def url(self) -> str:
self._completeIfNotSet(self._url)
return self._url.value
def _useAttributes(self, attributes: dict[str, Any]) -> None:
if "author" in attributes: # pragma no branch
self._author = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["author"])
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"])
super()._useAttributes(attributes)
if "body_version" in attributes: # pragma no branch

@@ -190,12 +127,6 @@ self._body_version = self._makeStringAttribute(attributes["body_version"])

self._comments_url = self._makeStringAttribute(attributes["comments_url"])
if "created_at" in attributes: # pragma no branch
self._created_at = self._makeDatetimeAttribute(attributes["created_at"])
if "html_url" in attributes: # pragma no branch
self._html_url = self._makeStringAttribute(attributes["html_url"])
if "last_edited_at" in attributes: # pragma no branch
self._last_edited_at = self._makeDatetimeAttribute(attributes["last_edited_at"])
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 "pinned" in attributes: # pragma no branch

@@ -207,7 +138,1 @@ self._pinned = self._makeBoolAttribute(attributes["pinned"])

self._team_url = self._makeStringAttribute(attributes["team_url"])
if "title" in attributes:
self._title = self._makeStringAttribute(attributes["title"])
if "updated_at" in attributes: # pragma no branch
self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"])
if "url" in attributes: # pragma no branch
self._url = self._makeStringAttribute(attributes["url"])

@@ -198,3 +198,3 @@ ############################ Copyrights and license ############################

url_parameters,
None,
headers=None,
list_item="workflow_runs",

@@ -201,0 +201,0 @@ )

@@ -15,2 +15,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Geoffrey <geoffrey@moveparallel.com> #
# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> #

@@ -42,2 +43,3 @@ # #

import github.GitCommit
import github.NamedUser
import github.PullRequest

@@ -51,2 +53,3 @@ import github.WorkflowJob

from github.GitCommit import GitCommit
from github.NamedUser import NamedUser
from github.PullRequest import PullRequest

@@ -82,2 +85,3 @@ from github.Repository import Repository

self._updated_at: Attribute[datetime] = NotSet
self._actor: Attribute[NamedUser] = NotSet
self._pull_requests: Attribute[list[PullRequest]] = NotSet

@@ -195,2 +199,7 @@ self._status: Attribute[str] = NotSet

@property
def actor(self) -> NamedUser:
self._completeIfNotSet(self._actor)
return self._actor.value
@property
def jobs_url(self) -> str:

@@ -348,2 +357,4 @@ self._completeIfNotSet(self._jobs_url)

self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"])
if "actor" in attributes: # pragma no branch
self._actor = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["actor"])
if "jobs_url" in attributes: # pragma no branch

@@ -350,0 +361,0 @@ self._jobs_url = self._makeStringAttribute(attributes["jobs_url"])

Metadata-Version: 2.1
Name: PyGithub
Version: 2.4.0
Version: 2.5.0
Summary: Use the full Github API v3

@@ -5,0 +5,0 @@ Author-email: Vincent Jacques <vincent@vincent-jacques.net>

Metadata-Version: 2.1
Name: PyGithub
Version: 2.4.0
Version: 2.5.0
Summary: Use the full Github API v3

@@ -5,0 +5,0 @@ Author-email: Vincent Jacques <vincent@vincent-jacques.net>

@@ -17,3 +17,2 @@ .git-blame-ignore-revs

.github/release-drafter.yml
.github/stale.yml
.github/workflows/_build-pkg.yml

@@ -23,2 +22,3 @@ .github/workflows/ci.yml

.github/workflows/pypi-release.yml
.github/workflows/top-issues.yaml
PyGithub.egg-info/PKG-INFO

@@ -92,2 +92,4 @@ PyGithub.egg-info/SOURCES.txt

github/DeploymentStatus.py
github/DiscussionBase.py
github/DiscussionCommentBase.py
github/Download.py

@@ -171,2 +173,5 @@ github/Enterprise.py

github/RepositoryAdvisory.py
github/RepositoryDiscussion.py
github/RepositoryDiscussionCategory.py
github/RepositoryDiscussionComment.py
github/RepositoryKey.py

@@ -320,2 +325,3 @@ github/RepositoryPreferences.py

tests/RepositoryAdvisory.py
tests/RepositoryDiscussion.py
tests/RepositoryKey.py

@@ -383,2 +389,3 @@ tests/Requester.py

tests/ReplayData/AuthenticatedUser.testGetKeys.txt
tests/ReplayData/AuthenticatedUser.testGetMemberships.txt
tests/ReplayData/AuthenticatedUser.testGetMigrations.txt

@@ -595,2 +602,3 @@ tests/ReplayData/AuthenticatedUser.testGetNotification.txt

tests/ReplayData/Github.testGetReposSince.txt
tests/ReplayData/Github.testGetRepositoryDiscussion.txt
tests/ReplayData/Github.testGetUserById.txt

@@ -623,4 +631,12 @@ tests/ReplayData/Github.testGetUsers.txt

tests/ReplayData/GraphQl.testDefaultUrl.txt
tests/ReplayData/GraphQl.testMutation.txt
tests/ReplayData/GraphQl.testMutationClass.txt
tests/ReplayData/GraphQl.testNode.txt
tests/ReplayData/GraphQl.testNodeClass.txt
tests/ReplayData/GraphQl.testOtherPort.txt
tests/ReplayData/GraphQl.testOtherUrl.txt
tests/ReplayData/GraphQl.testPaginationAndRestIntegration.txt
tests/ReplayData/GraphQl.testQuery.txt
tests/ReplayData/GraphQl.testQueryGraphQlClass.txt
tests/ReplayData/GraphQl.testQueryRestClass.txt
tests/ReplayData/Hook.setUp.txt

@@ -862,2 +878,4 @@ tests/ReplayData/Hook.testDelete.txt

tests/ReplayData/PaginatedList.testCustomPerPage.txt
tests/ReplayData/PaginatedList.testCustomPerPageIteration.txt
tests/ReplayData/PaginatedList.testCustomPerPageReversedIteration.txt
tests/ReplayData/PaginatedList.testCustomPerPageWithGetPage.txt

@@ -868,2 +886,3 @@ tests/ReplayData/PaginatedList.testCustomPerPageWithNoUrlParams2.txt

tests/ReplayData/PaginatedList.testGettingTheReversedListDoesNotModifyTheOriginalList.txt
tests/ReplayData/PaginatedList.testGraphQlPagination.txt
tests/ReplayData/PaginatedList.testIntIndexingAfterIteration.txt

@@ -1079,2 +1098,7 @@ tests/ReplayData/PaginatedList.testIntIndexingInFirstPage.txt

tests/ReplayData/Repository.testGetDeployments.txt
tests/ReplayData/Repository.testGetDiscussion.txt
tests/ReplayData/Repository.testGetDiscussions.txt
tests/ReplayData/Repository.testGetDiscussionsByAnswered.txt
tests/ReplayData/Repository.testGetDiscussionsByCategory.txt
tests/ReplayData/Repository.testGetDiscussionsByStates.txt
tests/ReplayData/Repository.testGetDownloads.txt

@@ -1155,2 +1179,6 @@ tests/ReplayData/Repository.testGetEvents.txt

tests/ReplayData/RepositoryAdvisory.testUpdateSingleFieldDoesNotRemoveOtherFields.txt
tests/ReplayData/RepositoryDiscussion.setUp.txt
tests/ReplayData/RepositoryDiscussion.testAddAndDeleteComment.txt
tests/ReplayData/RepositoryDiscussion.testGetComments.txt
tests/ReplayData/RepositoryDiscussion.testGetCommentsWithoutNodeId.txt
tests/ReplayData/RepositoryKey.setUp.txt

@@ -1157,0 +1185,0 @@ tests/ReplayData/RepositoryKey.testDelete.txt

@@ -15,2 +15,3 @@ #!/usr/bin/env python

# Copyright 2023 Jonathan Leitschuh <jonathan.leitschuh@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #

@@ -17,0 +18,0 @@ # This file is part of PyGithub. #

@@ -32,2 +32,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Chris Wells <ping@cwlls.com> #
# Copyright 2024 Eduardo Ramírez <edu.rh90@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #

@@ -787,1 +788,12 @@ # Copyright 2024 Oskar Jansson <56458534+janssonoskar@users.noreply.github.com>#

self.assertEqual(installations.totalCount, 1)
def testGetMemberships(self):
membership_data = self.user.get_organization_memberships()
self.assertListKeyEqual(
membership_data,
lambda e: e.organization.login,
["aneyem-github", "nko4", "geoservel", "iic2154-uc-cl", "nnodes", "sushiclm"],
)
self.assertListKeyEqual(
membership_data, lambda e: e.role, ["member", "member", "admin", "member", "member", "admin"]
)

@@ -21,2 +21,4 @@ ############################ Copyrights and license ############################

# Copyright 2023 chantra <chantra@users.noreply.github.com> #
# Copyright 2024 Bernhard M. Wiedemann <githubbmwprimary@lsmod.de> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Jonathan Kliem <jonathan.kliem@gmail.com> #

@@ -180,6 +182,4 @@ # #

# test token expiry
# token expires 2024-11-25 01:00:02
token = installation_auth.token
self.assertFalse(installation_auth._is_expired)
self.assertEqual(

@@ -190,3 +190,4 @@ installation_auth._AppInstallationAuth__installation_authorization.expires_at,

# forward the clock so token expires
# test token expiry
# control the current time used by _is_expired
with mock.patch("github.Auth.datetime") as dt:

@@ -210,5 +211,5 @@ # just before expiry

# use the token
self.assertEqual(g.get_user("ammarmallik").name, "Ammar Akbar")
self.assertEqual(g.get_repo("PyGithub/PyGithub").full_name, "PyGithub/PyGithub")
# use the token
self.assertEqual(g.get_user("ammarmallik").name, "Ammar Akbar")
self.assertEqual(g.get_repo("PyGithub/PyGithub").full_name, "PyGithub/PyGithub")

@@ -215,0 +216,0 @@ def testAppInstallationAuthAuthenticationRequesterArgs(self):

@@ -16,2 +16,3 @@ ############################ Copyrights and license ############################

# Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 iarspider <iarspider@gmail.com> #

@@ -18,0 +19,0 @@ # #

@@ -18,2 +18,3 @@ ############################ Copyrights and license ############################

# Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 iarspider <iarspider@gmail.com> #

@@ -20,0 +21,0 @@ # #

@@ -25,2 +25,4 @@ ############################ Copyrights and license ############################

# Copyright 2023 Joseph Henrich <crimsonknave@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Min RK <benjaminrk@gmail.com> #
# #

@@ -632,1 +634,4 @@ # This file is part of PyGithub. #

)
def testRequester(self):
assert self.g.requester is self.g.__requester

@@ -15,2 +15,4 @@ ############################ Copyrights and license ############################

# Copyright 2023 chantra <chantra@users.noreply.github.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Min RK <benjaminrk@gmail.com> #
# #

@@ -284,1 +286,4 @@ # This file is part of PyGithub. #

self.assertEqual(app.url, "/apps/pygithubtest")
assert github_integration.requester is github_integration.__requester
assert app.requester is app._requester

@@ -7,2 +7,3 @@ ############################ Copyrights and license ############################

# Copyright 2023 Nicolas Schweitzer <nicolas.schweitzer@datadoghq.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #

@@ -30,2 +31,5 @@ # This file is part of PyGithub. #

import github.Repository
import github.RepositoryDiscussion
from . import Framework

@@ -37,2 +41,18 @@

class GithubObject(unittest.TestCase):
def testAttributesAsRest(self):
_ = gho.as_rest_api_attributes
self.assertIsNone(_(None))
self.assertDictEqual(_({}), {})
self.assertDictEqual(_({"id": "NID", "databaseId": "DBID"}), {"node_id": "NID", "id": "DBID"})
self.assertDictEqual(_({"someId": "someId"}), {"some_id": "someId"})
self.assertDictEqual(_({"someObj": {"someId": "someId"}}), {"some_obj": {"some_id": "someId"}})
self.assertDictEqual(_({"bodyHTML": "<html/>"}), {"body_html": "<html/>"})
def testApiType(self):
self.assertEqual(github.Repository.Repository.is_rest(), True)
self.assertEqual(github.Repository.Repository.is_graphql(), False)
self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_rest(), False)
self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_graphql(), True)
def testMakeDatetimeAttribute(self):

@@ -39,0 +59,0 @@ for value, expected in [

@@ -26,2 +26,8 @@ ############################ Copyrights and license ############################

import github
import github.GithubException
import github.Organization
import github.Repository
import github.RepositoryDiscussion
import github.RepositoryDiscussionComment
import github.Requester
from github import Github

@@ -38,13 +44,9 @@

return {
"data": {
"disablePullRequestAutoMerge": {
"actor": {
"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4",
"login": "heitorpolidoro",
"resourcePath": "/heitorpolidoro",
"url": f"{base_url}/heitorpolidoro",
},
"clientMutationId": None,
}
}
"actor": {
"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4",
"login": "heitorpolidoro",
"resourcePath": "/heitorpolidoro",
"url": f"{base_url}/heitorpolidoro",
},
"clientMutationId": None,
}

@@ -79,1 +81,280 @@

assert response == self.expected(base_url)
def testNode(self):
requester = self.g._Github__requester
headers, data = requester.graphql_node("D_kwDOADYVqs4ATJZD", "title", "Discussion")
self.assertTrue(headers)
self.assertEqual(
data.get("data", {}).get("node", {}).get("title"),
"Is there a way to search if a string present in default branch?",
)
# non-existing node should throw a NOT FOUND exception
with self.assertRaises(github.UnknownObjectException) as e:
requester.graphql_node("D_abcdefgh", "title", "Discussion")
self.assertEqual(e.exception.status, 404)
self.assertEqual(
e.exception.data,
{
"data": {"node": None},
"errors": [
{
"type": "NOT_FOUND",
"path": ["node"],
"locations": [{"line": 3, "column": 15}],
"message": "Could not resolve to a node with the global id of 'D_abcdefgh'",
}
],
},
)
self.assertEqual(e.exception.message, "Could not resolve to a node with the global id of 'D_abcdefgh'")
# wrong type should throw an exception
with self.assertRaises(github.GithubException) as e:
requester.graphql_node("D_kwDOADYVqs4ATJZD", "login", "User")
self.assertEqual(e.exception.status, 400)
self.assertEqual(e.exception.data, {"data": {"node": {"__typename": "Discussion"}}})
self.assertEqual(e.exception.message, "Retrieved User object is of different type: Discussion")
def testNodeClass(self):
requester = self.g._Github__requester
discussion = requester.graphql_node_class(
"D_kwDOADYVqs4ATJZD", "title", github.RepositoryDiscussion.RepositoryDiscussion, "Discussion"
)
self.assertEqual(discussion.title, "Is there a way to search if a string present in default branch?")
# non-existing node should throw a NOT FOUND exception
with self.assertRaises(github.UnknownObjectException) as e:
requester.graphql_node_class(
"D_abcdefgh", "title", github.RepositoryDiscussion.RepositoryDiscussion, "Discussion"
)
self.assertEqual(e.exception.status, 404)
self.assertEqual(
e.exception.data,
{
"data": {"node": None},
"errors": [
{
"type": "NOT_FOUND",
"path": ["node"],
"locations": [{"line": 3, "column": 15}],
"message": "Could not resolve to a node with the global id of 'D_abcdefgh'",
}
],
},
)
self.assertEqual(e.exception.message, "Could not resolve to a node with the global id of 'D_abcdefgh'")
# wrong type should throw an exception
with self.assertRaises(github.GithubException) as e:
requester.graphql_node_class(
"D_kwDOADYVqs4ATJZD", "login", github.RepositoryDiscussion.RepositoryDiscussion, "User"
)
self.assertEqual(e.exception.status, 400)
self.assertEqual(e.exception.data, {"data": {"node": {"__typename": "Discussion"}}})
self.assertEqual(e.exception.message, "Retrieved User object is of different type: Discussion")
def testQuery(self):
requester = self.g._Github__requester
query = """
query Q($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) { url }
}"""
variables = {"owner": "PyGithub", "name": "PyGithub"}
header, data = requester.graphql_query(query, variables)
self.assertTrue(header)
self.assertEqual(data, {"data": {"repository": {"url": "https://github.com/PyGithub/PyGithub"}}})
def testQueryRestClass(self):
requester = self.g._Github__requester
query = """
query Q($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) { url }
}"""
variables = {"owner": "PyGithub", "name": "PyGithub"}
repo = requester.graphql_query_class(query, variables, ["repository"], github.Repository.Repository)
self.assertIsInstance(repo, github.Repository.Repository)
self.assertEqual(repo.html_url, "https://github.com/PyGithub/PyGithub")
def testQueryGraphQlClass(self):
requester = self.g._Github__requester
query = """
query Q($id: ID!) {
node(id: $id) { ... on DiscussionComment { url } }
}"""
variables = {"id": "DC_kwDOADYVqs4AU3Mg"}
comment = requester.graphql_query_class(
query, variables, ["node"], github.RepositoryDiscussionComment.RepositoryDiscussionComment
)
self.assertIsInstance(comment, github.RepositoryDiscussionComment.RepositoryDiscussionComment)
self.assertEqual(
comment.html_url, "https://github.com/PyGithub/PyGithub/discussions/2480#discussioncomment-5468960"
)
def testMutation(self):
requester = self.g._Github__requester
header, data = requester.graphql_named_mutation(
"followOrganization", {"organizationId": "O_kgDOAKxBpA"}, "organization { name }"
)
self.assertTrue(header)
self.assertEqual(data, {"organization": {"name": "PyGithub"}})
def testMutationClass(self):
requester = self.g._Github__requester
org = requester.graphql_named_mutation_class(
"followOrganization",
{"organizationId": "O_kgDOAKxBpA"},
"organization { name }",
"organization",
github.Organization.Organization,
)
self.assertEqual(org.name, "PyGithub")
def testPaginationAndRestIntegration(self):
repo = self.g.get_repo("PyGithub/PyGithub")
discussion_schema = """
id
url
number
author {
login
avatarUrl
url
}
repository {
owner { login }
name
issues(first: 10) {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
nodes {
databaseId
id
number
title
}
}
}
title
createdAt
comments(first: 10) {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
nodes {
id
url
createdAt
author {
login
avatarUrl
url
}
isAnswer
replies(first: 10) {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
nodes {
id
url
createdAt
author {
login
avatarUrl
url
}
}
}
}
}
labels(first: 10) {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
nodes {
id
name
issues(first: 10) {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
nodes {
databaseId
id
number
title
}
}
}
}
"""
discussions_pages = repo.get_discussions(discussion_schema)
discussions = list(discussions_pages)
# would perform an extra request if called before iterating discussions_pages
self.assertEqual(discussions_pages.totalCount, 65)
self.assertEqual(len(discussions), 65)
self.assertEqual(discussions[0].number, 3044)
self.assertEqual(discussions[-1].number, 1780)
discussion = discussions[28]
self.assertEqual(discussion.author.login, "arunanandhan")
self.assertEqual(discussion.node_id, "D_kwDOADYVqs4ATJZD")
self.assertEqual(
discussion.author.avatar_url,
"https://avatars.githubusercontent.com/u/48812131?u=571c345a5994a55100a16b45a9688f5d6d340730&v=4",
)
self.assertEqual(discussion.author.html_url, "https://github.com/arunanandhan")
# inner page of GraphQL comments
comments = discussion.get_comments("id")
self.assertEqual(comments.totalCount, 1) # does not perform an extra request
comments = list(comments)
self.assertEqual(len(comments), 1)
comment = comments[0]
self.assertEqual(comment.node_id, "DC_kwDOADYVqs4AU3Mg")
self.assertEqual(
comment.html_url, "https://github.com/PyGithub/PyGithub/discussions/2480#discussioncomment-5468960"
)
self.assertEqual(comment.author.login, "EnricoMi")
# inner inner page of GraphQL replies
replies = comment.get_replies()
self.assertEqual(replies.totalCount, 5) # does not perform an extra request
self.assertEqual(replies[0].node_id, "DC_kwDOADYVqs4AU3Wg")
# inner page of REST labels
labels_pages = discussions[3].get_labels()
self.assertEqual(labels_pages.totalCount, 1)
label = labels_pages[0]
self.assertEqual(label.name, "Call for Contribution")
# inner REST repository
repo = discussion.repository
issues_pages = repo.get_issues()
issue = issues_pages[0]
# GraphQL retrieved 10 issues, but repo.get_issues() is not aware of that data
# it calls the REST API
self.assertEqual(issues_pages.totalCount, 341)
self.assertEqual(issue.number, 3045)

@@ -17,2 +17,4 @@ ############################ Copyrights and license ############################

# Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Min RK <benjaminrk@gmail.com> #
# #

@@ -99,1 +101,6 @@ # This file is part of PyGithub. #

self.assertEqual(repo.full_name, "PyGithub/PyGithub")
def testRequester(self):
self.assertEqual(len(self.installations), 1)
installation = self.installations[0]
assert installation.requester is installation._requester

@@ -20,2 +20,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Arash Kadkhodaei <arash77.kad@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #

@@ -22,0 +23,0 @@ # This file is part of PyGithub. #

@@ -18,2 +18,3 @@ ############################ Copyrights and license ############################

# Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Jonathan Kliem <jonathan.kliem@gmail.com> #

@@ -20,0 +21,0 @@ # #

@@ -15,2 +15,3 @@ ############################ Copyrights and license ############################

# Copyright 2023 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Matthias Bilger <matthias@bilger.info> #

@@ -17,0 +18,0 @@ # #

@@ -21,2 +21,3 @@ ############################ Copyrights and license ############################

# Copyright 2023 YugoHino <henom06@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #

@@ -41,2 +42,4 @@ # This file is part of PyGithub. #

from datetime import datetime, timezone
from github.PaginatedList import PaginatedList as PaginatedListImpl

@@ -54,2 +57,6 @@

def testIsApiType(self):
self.assertTrue(self.list.is_rest)
self.assertFalse(self.list.is_graphql)
def testIteration(self):

@@ -332,2 +339,36 @@ self.assertEqual(len(list(self.list)), 333)

def testCustomPerPageIteration(self):
self.g.per_page = 3
repo = self.g.get_repo("PyGithub/PyGithub")
comments = repo.get_issue(1136).get_comments()
self.assertEqual(
[
datetime(2019, 8, 10, 18, 16, 46, tzinfo=timezone.utc),
datetime(2024, 1, 6, 16, 4, 34, tzinfo=timezone.utc),
datetime(2024, 1, 6, 17, 34, 11, tzinfo=timezone.utc),
datetime(2024, 3, 20, 15, 24, 15, tzinfo=timezone.utc),
datetime(2024, 3, 21, 10, 55, 14, tzinfo=timezone.utc),
datetime(2024, 3, 21, 14, 2, 22, tzinfo=timezone.utc),
datetime(2024, 3, 24, 13, 58, 57, tzinfo=timezone.utc),
],
[comment.created_at for comment in comments],
)
def testCustomPerPageReversedIteration(self):
self.g.per_page = 3
repo = self.g.get_repo("PyGithub/PyGithub")
comments = repo.get_issue(1136).get_comments().reversed
self.assertEqual(
[
datetime(2024, 3, 24, 13, 58, 57, tzinfo=timezone.utc),
datetime(2024, 3, 21, 14, 2, 22, tzinfo=timezone.utc),
datetime(2024, 3, 21, 10, 55, 14, tzinfo=timezone.utc),
datetime(2024, 3, 20, 15, 24, 15, tzinfo=timezone.utc),
datetime(2024, 1, 6, 17, 34, 11, tzinfo=timezone.utc),
datetime(2024, 1, 6, 16, 4, 34, tzinfo=timezone.utc),
datetime(2019, 8, 10, 18, 16, 46, tzinfo=timezone.utc),
],
[comment.created_at for comment in comments],
)
def testNoFirstPage(self):

@@ -350,1 +391,22 @@ self.assertFalse(next(iter(self.list), None))

self.assertDictEqual(transformer(input_dict), {"a": 1, "b": 2, "c": 4, "d": 5, "e": 6})
def testGraphQlPagination(self):
repo = self.g.get_repo("PyGithub/PyGithub")
discussions = repo.get_discussions("id number")
self.assertFalse(discussions.is_rest)
self.assertTrue(discussions.is_graphql)
rev = discussions.reversed
discussions_list = list(discussions)
self.assertEqual(discussions.totalCount, 65)
self.assertEqual(len(discussions_list), 65)
self.assertEqual(discussions_list[0].number, 3044)
self.assertEqual(discussions_list[-1].number, 1780)
reversed_list = list(rev)
self.assertEqual(rev.totalCount, 65)
self.assertEqual(len(reversed_list), 65)
self.assertListEqual([d.number for d in reversed_list], [d.number for d in reversed(discussions_list)])
# accessing totalCount before iterating the PaginatedList triggers another request
self.assertEqual(repo.get_discussions("id number").totalCount, 65)

@@ -30,2 +30,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Den Stroebel <stroebs@users.noreply.github.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #

@@ -526,13 +527,9 @@ # This file is part of PyGithub. #

assert response == {
"data": {
"enablePullRequestAutoMerge": {
"actor": {
"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4",
"login": "heitorpolidoro",
"resourcePath": "/heitorpolidoro",
"url": "https://github.com/heitorpolidoro",
},
"clientMutationId": None,
}
}
"actor": {
"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4",
"login": "heitorpolidoro",
"resourcePath": "/heitorpolidoro",
"url": "https://github.com/heitorpolidoro",
},
"clientMutationId": None,
}

@@ -571,13 +568,9 @@

assert response == {
"data": {
"disablePullRequestAutoMerge": {
"actor": {
"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4",
"login": "heitorpolidoro",
"resourcePath": "/heitorpolidoro",
"url": "https://github.com/heitorpolidoro",
},
"clientMutationId": None,
}
}
"actor": {
"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4",
"login": "heitorpolidoro",
"resourcePath": "/heitorpolidoro",
"url": "https://github.com/heitorpolidoro",
},
"clientMutationId": None,
}

@@ -29,5 +29,5 @@ https

{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation DisablePullRequestAutoMerge($input: DisablePullRequestAutoMergeInput!) { disablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ=="}}}
{"query": "mutation Mutation($input: DisablePullRequestAutoMergeInput!) { disablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ=="}}}
200
[('Server', 'GitHub.com'), ('Date', 'Wed, 07 Jun 2023 08:27:45 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/"1573389419d98a2b3d9a6b1fc058a68f1fc3d31108ccfdab8ca4121153626211"'), ('Last-Modified', 'Wed, 07 Jun 2023 04:02:03 GMT'), ('X-OAuth-Scopes', 'public_repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1686126614'), ('X-RateLimit-Used', '41'), ('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', '8A96:10854:895AE2:8AB25B:64803F81')]
{"data": {"disablePullRequestAutoMerge": {"actor": {"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4", "login": "heitorpolidoro", "resourcePath": "/heitorpolidoro", "url": "https://github.com/heitorpolidoro"}, "clientMutationId": null}}}

@@ -29,5 +29,5 @@ https

{'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation DisablePullRequestAutoMerge($input: DisablePullRequestAutoMergeInput!) { disablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ=="}}}
{"query": "mutation Mutation($input: DisablePullRequestAutoMergeInput!) { disablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ=="}}}
200
[('Server', 'enterprise.com'), ('Date', 'Wed, 07 Jun 2023 08:27:45 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/"1573389419d98a2b3d9a6b1fc058a68f1fc3d31108ccfdab8ca4121153626211"'), ('Last-Modified', 'Wed, 07 Jun 2023 04:02:03 GMT'), ('X-OAuth-Scopes', 'public_repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1686126614'), ('X-RateLimit-Used', '41'), ('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', '8A96:10854:895AE2:8AB25B:64803F81')]
{"data": {"disablePullRequestAutoMerge": {"actor": {"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4", "login": "heitorpolidoro", "resourcePath": "/heitorpolidoro", "url": "https://my.enterprise.com:8080/api/v3/heitorpolidoro"}, "clientMutationId": null}}}

@@ -29,5 +29,5 @@ https

{'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation DisablePullRequestAutoMerge($input: DisablePullRequestAutoMergeInput!) { disablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ=="}}}
{"query": "mutation Mutation($input: DisablePullRequestAutoMergeInput!) { disablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ=="}}}
200
[('Server', 'enterprise.com'), ('Date', 'Wed, 07 Jun 2023 08:27:45 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/"1573389419d98a2b3d9a6b1fc058a68f1fc3d31108ccfdab8ca4121153626211"'), ('Last-Modified', 'Wed, 07 Jun 2023 04:02:03 GMT'), ('X-OAuth-Scopes', 'public_repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1686126614'), ('X-RateLimit-Used', '41'), ('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', '8A96:10854:895AE2:8AB25B:64803F81')]
{"data": {"disablePullRequestAutoMerge": {"actor": {"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4", "login": "heitorpolidoro", "resourcePath": "/heitorpolidoro", "url": "https://my.enterprise.com/api/v3/heitorpolidoro"}, "clientMutationId": null}}}

@@ -7,5 +7,5 @@ https

{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation MinimizeComment($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": "IC_kwDOGpsAJ86Gecc_", "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}}}}

@@ -7,5 +7,5 @@ https

{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}
{"query": "mutation UnminimizeComment($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": "IC_kwDOGpsAJ86Gecc_"}}}
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}}}}

@@ -16,3 +16,3 @@ https

None
/repos/austinsasko/PyGithub/pulls?head=revert-20-revert-19-revert-18-revert-16-revert-15-revert-14-revert-13-revert-12-revert-11-revert-10-revert-9-revert-8-revert-7-revert-6-revert-5-revert-4-revert-3-revert-2-revert-1-testing&per_page=1
/repos/austinsasko/PyGithub/pulls?head=austinsasko%3Arevert-20-revert-19-revert-18-revert-16-revert-15-revert-14-revert-13-revert-12-revert-11-revert-10-revert-9-revert-8-revert-7-revert-6-revert-5-revert-4-revert-3-revert-2-revert-1-testing&per_page=1
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}

@@ -19,0 +19,0 @@ None

@@ -38,3 +38,3 @@ https

None
/repos/austinsasko/PyGithub/pulls?head=revert-20-revert-19-revert-18-revert-16-revert-15-revert-14-revert-13-revert-12-revert-11-revert-10-revert-9-revert-8-revert-7-revert-6-revert-5-revert-4-revert-3-revert-2-revert-1-testing&per_page=1
/repos/austinsasko/PyGithub/pulls?head=austinsasko%3Arevert-20-revert-19-revert-18-revert-16-revert-15-revert-14-revert-13-revert-12-revert-11-revert-10-revert-9-revert-8-revert-7-revert-6-revert-5-revert-4-revert-3-revert-2-revert-1-testing&per_page=1
{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}

@@ -41,0 +41,0 @@ None

@@ -7,5 +7,5 @@ https

{'Authorization': 'Basic login_and_password_removed', 'Content-Type': 'application/json', 'User-Agent': 'PyGithub/Python'}
{"query": "mutation DisablePullRequestAutoMerge($input: DisablePullRequestAutoMergeInput!) { disablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ=="}}}
{"query": "mutation Mutation($input: DisablePullRequestAutoMergeInput!) { disablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ=="}}}
200
[('Server', 'GitHub.com'), ('Date', 'Wed, 07 Jun 2023 08:27:45 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/"1573389419d98a2b3d9a6b1fc058a68f1fc3d31108ccfdab8ca4121153626211"'), ('Last-Modified', 'Wed, 07 Jun 2023 04:02:03 GMT'), ('X-OAuth-Scopes', 'public_repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1686126614'), ('X-RateLimit-Used', '41'), ('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', '8A96:10854:895AE2:8AB25B:64803F81')]
{"data": {"disablePullRequestAutoMerge": {"actor": {"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4", "login": "heitorpolidoro", "resourcePath": "/heitorpolidoro", "url": "https://github.com/heitorpolidoro"}, "clientMutationId": null}}}

@@ -7,5 +7,5 @@ https

{'Authorization': 'Basic login_and_password_removed', 'Content-Type': 'application/json', 'User-Agent': 'PyGithub/Python'}
{"query": "mutation EnablePullRequestAutoMerge($input: EnablePullRequestAutoMergeInput!) { enablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ==", "mergeMethod": "SQUASH", "authorEmail": "foo@example.com", "clientMutationId": "1234", "commitBody": "body of the commit", "commitHeadline": "The commit headline", "expectedHeadOid": "0283d46537193f1fed7d46859f15c5304b9836f9"}}}
{"query": "mutation Mutation($input: EnablePullRequestAutoMergeInput!) { enablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ==", "mergeMethod": "SQUASH", "authorEmail": "foo@example.com", "clientMutationId": "1234", "commitBody": "body of the commit", "commitHeadline": "The commit headline", "expectedHeadOid": "0283d46537193f1fed7d46859f15c5304b9836f9"}}}
200
[('Server', 'GitHub.com'), ('Date', 'Wed, 07 Jun 2023 08:27:45 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/"1573389419d98a2b3d9a6b1fc058a68f1fc3d31108ccfdab8ca4121153626211"'), ('Last-Modified', 'Wed, 07 Jun 2023 04:02:03 GMT'), ('X-OAuth-Scopes', 'public_repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1686126614'), ('X-RateLimit-Used', '41'), ('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', '8A96:10854:895AE2:8AB25B:64803F81')]
{"data": {"enablePullRequestAutoMerge": {"actor": {"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4", "login": "heitorpolidoro", "resourcePath": "/heitorpolidoro", "url": "https://github.com/heitorpolidoro"}, "clientMutationId": null}}}

@@ -7,5 +7,5 @@ https

{'Authorization': 'Basic login_and_password_removed', 'Content-Type': 'application/json', 'User-Agent': 'PyGithub/Python'}
{"query": "mutation EnablePullRequestAutoMerge($input: EnablePullRequestAutoMergeInput!) { enablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ==", "mergeMethod": "MERGE"}}}
{"query": "mutation Mutation($input: EnablePullRequestAutoMergeInput!) { enablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ==", "mergeMethod": "MERGE"}}}
200
[('Server', 'GitHub.com'), ('Date', 'Wed, 07 Jun 2023 08:27:45 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/"1573389419d98a2b3d9a6b1fc058a68f1fc3d31108ccfdab8ca4121153626211"'), ('Last-Modified', 'Wed, 07 Jun 2023 04:02:03 GMT'), ('X-OAuth-Scopes', 'public_repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1686126614'), ('X-RateLimit-Used', '41'), ('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', '8A96:10854:895AE2:8AB25B:64803F81')]
{"data": {"enablePullRequestAutoMerge": {"actor": {"avatarUrl": "https://avatars.githubusercontent.com/u/14806300?u=786f9f8ef8782d45381b01580f7f7783cf9c7e37&v=4", "login": "heitorpolidoro", "resourcePath": "/heitorpolidoro", "url": "https://github.com/heitorpolidoro"}, "clientMutationId": null}}}

@@ -7,5 +7,5 @@ https

{'Authorization': 'Basic login_and_password_removed', 'Content-Type': 'application/json', 'User-Agent': 'PyGithub/Python'}
{"query": "mutation EnablePullRequestAutoMerge($input: EnablePullRequestAutoMergeInput!) { enablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ==", "mergeMethod": "MERGE"}}}
{"query": "mutation Mutation($input: EnablePullRequestAutoMergeInput!) { enablePullRequestAutoMerge(input: $input) { actor { avatarUrl login resourcePath url } clientMutationId } }", "variables": {"input": {"pullRequestId": "MDExOlB1bGxSZXF1ZXN0MTQzNjIxNQ==", "mergeMethod": "MERGE"}}}
200
[('Server', 'GitHub.com'), ('Date', 'Wed, 07 Jun 2023 08:27:45 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/"1573389419d98a2b3d9a6b1fc058a68f1fc3d31108ccfdab8ca4121153626211"'), ('Last-Modified', 'Wed, 07 Jun 2023 04:02:03 GMT'), ('X-OAuth-Scopes', 'public_repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1686126614'), ('X-RateLimit-Used', '41'), ('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', '8A96:10854:895AE2:8AB25B:64803F81')]
{"data": {"enablePullRequestAutoMerge": null}, "errors": [{"locations": [{"column": 81, "line": 1}], "message": "Pull request Auto merge is not allowed for this repository", "path": ["enablePullRequestAutoMerge"], "type": "UNPROCESSABLE"}]}

@@ -19,2 +19,3 @@ ############################ Copyrights and license ############################

# Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Ramiro Morales <ramiro@users.noreply.github.com> #

@@ -21,0 +22,0 @@ # #

@@ -7,2 +7,3 @@ ############################ Copyrights and license ############################

# Copyright 2023 Trim21 <trim21.me@gmail.com> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #

@@ -32,2 +33,3 @@ # This file is part of PyGithub. #

import github
from github import Requester as gr

@@ -142,2 +144,36 @@ from . import Framework

def testGetParametersOfUrl(self):
self.assertEqual({}, gr.Requester.get_parameters_of_url("https://github.com/api"))
self.assertEqual({"per_page": ["10"]}, gr.Requester.get_parameters_of_url("https://github.com/api?per_page=10"))
self.assertEqual(
{"per_page": ["10"], "page": ["2"]},
gr.Requester.get_parameters_of_url("https://github.com/api?per_page=10&page=2"),
)
self.assertEqual(
{"item": ["1", "2", "3"]}, gr.Requester.get_parameters_of_url("https://github.com/api?item=1&item=2&item=3")
)
def testAddParametersToUrl(self):
self.assertEqual("https://github.com/api", gr.Requester.add_parameters_to_url("https://github.com/api", {}))
self.assertEqual(
"https://github.com/api?per_page=10",
gr.Requester.add_parameters_to_url("https://github.com/api", {"per_page": 10}),
)
self.assertEqual(
"https://github.com/api?per_page=10&page=2",
gr.Requester.add_parameters_to_url("https://github.com/api", {"per_page": 10, "page": 2}),
)
self.assertEqual(
"https://github.com/api?per_page=10&page=2",
gr.Requester.add_parameters_to_url("https://github.com/api?per_page=10", {"page": 2}),
)
self.assertEqual(
"https://github.com/api?per_page=10&page=2",
gr.Requester.add_parameters_to_url("https://github.com/api?per_page=10&page=1", {"page": 2}),
)
self.assertEqual(
"https://github.com/api?item=3&item=4",
gr.Requester.add_parameters_to_url("https://github.com/api?item=1&item=2&item=3", {"item": [3, 4]}),
)
def testCloseGithub(self):

@@ -144,0 +180,0 @@ mocked_connection = mock.MagicMock()

@@ -18,2 +18,3 @@ ############################ Copyrights and license ############################

# Copyright 2024 Caleb McCombs <caleb@mccombalot.net> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# #

@@ -20,0 +21,0 @@ # This file is part of PyGithub. #

@@ -11,2 +11,4 @@ ############################ Copyrights and license ############################

# Copyright 2024 Chris Gavin <chris@chrisgavin.me> #
# Copyright 2024 Enrico Minack <github@enrico.minack.dev> #
# Copyright 2024 Geoffrey <geoffrey@moveparallel.com> #
# #

@@ -47,2 +49,3 @@ # This file is part of PyGithub. #

)
self.assertEqual(self.workflow_run.actor.login, "nuang-ee")
self.assertEqual(self.workflow_run.id, 3881497935)

@@ -49,0 +52,0 @@ self.assertEqual(self.workflow_run.name, "CI")

# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 180
# Number of days of inactivity before a stale Issue or Pull Request is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 7
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels:
- feature request
- high priority
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: false
# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: false
# Label to use when marking as stale
staleLabel: stale
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when removing the stale label.
# unmarkComment: >
# Your comment here.
# Comment to post when closing a stale Issue or Pull Request.
# closeComment: >
# Your comment here.
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
# Limit to only `issues` or `pulls`
# only: issues
# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
# pulls:
# daysUntilStale: 30
# markComment: >
# This pull request has been automatically marked as stale because it has not had
# recent activity. It will be closed if no further activity occurs. Thank you
# for your contributions.
# issues:
# exemptLabels:
# - confirmed

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display